Luogu P4781【模板】拉格朗日插值
板题…注意一下求多个数的乘积的逆元不要一个个快速幂求逆元,那样很慢,时间复杂度就是O(n2log)O(n^2log)O(n2log).直接先乘起来最后求一次逆元就行了.时间复杂度为O(nlog+n2)=O(n2)O(nlog+n^2)=O(n^2)O(nlog+n2)=O(n2)
这样的拉格朗日插值是预处理O(n2)O(n^2)O(n2),插入O(n)O(n)O(n),查询O(n)O(n)O(n)的.使用的前提是可以求逆元.
CODE
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
template<typename T>void read(T &num) {
char ch; int flg=1;
while((ch=getchar())<'0'||ch>'9')if(ch=='-')flg=-flg;
for(num=0;ch>='0'&&ch<='9';num=num*10+ch-'0',ch=getchar());
num*=flg;
}
const int MAXN = 2005;
const int mod = 998244353;
int n, k, x[MAXN], y[MAXN], w[MAXN];
inline int qmul(int a, int b) {
int res = 1;
while(b) {
if(b&1) res = 1ll * res * a % mod;
a = 1ll * a * a % mod, b >>= 1;
}
return res;
}
inline int l(int k) {
int res = 1;
for(int i = 0; i < n; ++i)
res = 1ll * res * (k-x[i]) % mod;
return res;
}
int main() {
read(n), read(k);
for(int i = 0; i < n; ++i)
read(x[i]), read(y[i]);
for(int i = 0; i < n; ++i) {
w[i] = 1;
for(int j = 0; j < n; ++j)
if(x[i]-x[j]) w[i] = 1ll * w[i] * (x[i]-x[j]) % mod; //这里先乘起来
w[i] = 1ll * qmul(w[i], mod-2) * y[i] % mod; //再求逆元
}
int Ans = 0;
for(int i = 0; i < n; ++i) {
if(k == x[i]) return printf("%d\n", y[i]), 0; //虽然数据保证不会出现k=x[i]的情况,但还是判一下
Ans = (Ans + 1ll * w[i] * qmul(k-x[i], mod-2) % mod) % mod;
}
Ans = 1ll * Ans * l(k) % mod;
printf("%d\n", (Ans + mod) % mod);
}
Luogu P4781【模板】拉格朗日插值的更多相关文章
- CF622F——自然数幂和模板&&拉格朗日插值
题意 求 $ \displaystyle \sum_{i=1}^n i^k \ mod (1e9+7), n \leq 10^9, k \leq 10^6$. CF622F 分析 易知答案是一个 $k ...
- luogu P4781 【模板】拉格朗日插值
嘟嘟嘟 本来以为拉格朗日插值是一个很复杂的东西,今天学了一下才知道就是一个公式-- 我们都知道\(n\)个点\((x_i, y_i)\)可以确定唯一一个最高次为\(n - 1\)的多项式,那么现在我们 ...
- P4781 【模板】拉格朗日插值
P4781 [模板]拉格朗日插值 证明 :https://wenku.baidu.com/view/0f88088a172ded630b1cb6b4.html http://www.ebola.pro ...
- Luogu 4781 【模板】拉格朗日插值
模板题. 拉格朗日插值的精髓在于这个公式 $$f(x) = \sum_{i = 1}^{n}y_i\prod _{j \neq i}\frac{x - x_i}{x_j - x_i}$$ 其中$(x_ ...
- 【Luogu4781】【模板】拉格朗日插值
[Luogu4781][模板]拉格朗日插值 题面 洛谷 题解 套个公式就好 #include<cstdio> #define ll long long #define MOD 998244 ...
- LG4781 【模板】拉格朗日插值
题意 题目描述 由小学知识可知,$n$个点$(x_i,y_i)$可以唯一地确定一个多项式 现在,给定$n$个点,请你确定这个多项式,并将$k$代入求值 求出的值对$998244353$取模 输入输出格 ...
- LG4781 【模板】拉格朗日插值 和 JLOI2016 成绩比较
[模板]拉格朗日插值 题目描述 由小学知识可知,$n$个点$(x_i,y_i)$可以唯一地确定一个多项式 现在,给定$n$个点,请你确定这个多项式,并将$k$代入求值 求出的值对$998244353$ ...
- luogu P4948 数列求和 推式子 简单数学推导 二项式 拉格朗日插值
LINK:数列求和 每次遇到这种题目都不太会写.但是做法很简单. 终有一天我会成功的. 考虑类似等比数列求和的东西 帽子戏法一下. 设\(f(k)=\sum_{i=1}^ni^ka^i\) 考虑\(a ...
- luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT
LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...
随机推荐
- MIT 6.828 课程介绍
MIT 6.828 课程介绍 本文是对MIT 6.828操作系统课程介绍的简单摘录,详细介绍见6.828: Learning by doing以及朱佳顺的推荐一门课:6.828.学习资源均可以在课程主 ...
- poj2406(求字符串的周期,kmp算法next数组的应用)
题目链接:https://vjudge.net/problem/POJ-2406 题意:求出给定字符串的周期,和poj1961类似. 思路:直接利用next数组的定义即可,当没有周期时,周期即为1. ...
- hdoj3586 (树形dp)
题目链接:https://vjudge.net/problem/HDU-3586 题意:一棵边权树,要删掉一些边使得每个叶子结点不能到达树根,且这些边的权值<=上限Max,且边权和小于m,求最小 ...
- Kindergarten(网络流解法)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=2458 问你二分图的最大团是多大. #define IOS ios_base::sync_with_stdi ...
- WPF入门(3)——命令
命令是ICommand类型的属性,binding到控件上,用于代替事件,个人认为事件也很好,命令只是轻度解耦前后端. 闲话少说,上代码,示例是ScreenToGif的源代码中的一个命令: public ...
- 社工工具包 SEToolkit
社会工程学(Social Engineering)简称社工,其通过分析攻击对象的心理弱点,利用人性的本能反应,以及任何好奇心,贪婪等心理特征进行的,使用诸如假冒,欺骗,引诱等多种手段来达成攻击目标的一 ...
- NIO总结-----Buffer
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...
- 用101000张图片实现图像识别(算法的实现和流程)-python-tensorflow框架
一个月前,我将kaggle里面的food-101(101000张食物图片),数据包下载下来,想着实现图像识别,做了很长时间,然后自己电脑也带不动,不过好在是最后找各种方法实现出了识别,但是准确率真的非 ...
- Java面试题之Java虚拟机垃圾回收
JVM的垃圾回收机制,在内存充足的情况下,除非你显式的调用System.gc(),否则不会进行垃圾回收:在内存充足的情况下垃圾回收会自动运行. 一.引用计数算法 1.定义:引用计数算法会给对象添加一个 ...
- AOP底层实现原理,动态代理如何动态
代理 指定另外一个主体代替原来的某个主体去执行某个事物 代理执行的人 需要代理的人 需要代理的事情是一定要做的 但是被代理的人没有时间或自己做的不专业 静态代理: 父母朋友帮忙物色找对象 代理人掌握需 ...