洛谷传送门

板题…注意一下求多个数的乘积的逆元不要一个个快速幂求逆元,那样很慢,时间复杂度就是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

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. using namespace std;
  5. template<typename T>void read(T &num) {
  6. char ch; int flg=1;
  7. while((ch=getchar())<'0'||ch>'9')if(ch=='-')flg=-flg;
  8. for(num=0;ch>='0'&&ch<='9';num=num*10+ch-'0',ch=getchar());
  9. num*=flg;
  10. }
  11. const int MAXN = 2005;
  12. const int mod = 998244353;
  13. int n, k, x[MAXN], y[MAXN], w[MAXN];
  14. inline int qmul(int a, int b) {
  15. int res = 1;
  16. while(b) {
  17. if(b&1) res = 1ll * res * a % mod;
  18. a = 1ll * a * a % mod, b >>= 1;
  19. }
  20. return res;
  21. }
  22. inline int l(int k) {
  23. int res = 1;
  24. for(int i = 0; i < n; ++i)
  25. res = 1ll * res * (k-x[i]) % mod;
  26. return res;
  27. }
  28. int main() {
  29. read(n), read(k);
  30. for(int i = 0; i < n; ++i)
  31. read(x[i]), read(y[i]);
  32. for(int i = 0; i < n; ++i) {
  33. w[i] = 1;
  34. for(int j = 0; j < n; ++j)
  35. if(x[i]-x[j]) w[i] = 1ll * w[i] * (x[i]-x[j]) % mod; //这里先乘起来
  36. w[i] = 1ll * qmul(w[i], mod-2) * y[i] % mod; //再求逆元
  37. }
  38. int Ans = 0;
  39. for(int i = 0; i < n; ++i) {
  40. if(k == x[i]) return printf("%d\n", y[i]), 0; //虽然数据保证不会出现k=x[i]的情况,但还是判一下
  41. Ans = (Ans + 1ll * w[i] * qmul(k-x[i], mod-2) % mod) % mod;
  42. }
  43. Ans = 1ll * Ans * l(k) % mod;
  44. printf("%d\n", (Ans + mod) % mod);
  45. }

Luogu P4781【模板】拉格朗日插值的更多相关文章

  1. CF622F——自然数幂和模板&&拉格朗日插值

    题意 求 $ \displaystyle \sum_{i=1}^n i^k \ mod (1e9+7), n \leq 10^9, k \leq 10^6$. CF622F 分析 易知答案是一个 $k ...

  2. luogu P4781 【模板】拉格朗日插值

    嘟嘟嘟 本来以为拉格朗日插值是一个很复杂的东西,今天学了一下才知道就是一个公式-- 我们都知道\(n\)个点\((x_i, y_i)\)可以确定唯一一个最高次为\(n - 1\)的多项式,那么现在我们 ...

  3. P4781 【模板】拉格朗日插值

    P4781 [模板]拉格朗日插值 证明 :https://wenku.baidu.com/view/0f88088a172ded630b1cb6b4.html http://www.ebola.pro ...

  4. Luogu 4781 【模板】拉格朗日插值

    模板题. 拉格朗日插值的精髓在于这个公式 $$f(x) = \sum_{i = 1}^{n}y_i\prod _{j \neq i}\frac{x - x_i}{x_j - x_i}$$ 其中$(x_ ...

  5. 【Luogu4781】【模板】拉格朗日插值

    [Luogu4781][模板]拉格朗日插值 题面 洛谷 题解 套个公式就好 #include<cstdio> #define ll long long #define MOD 998244 ...

  6. LG4781 【模板】拉格朗日插值

    题意 题目描述 由小学知识可知,$n$个点$(x_i,y_i)$可以唯一地确定一个多项式 现在,给定$n$个点,请你确定这个多项式,并将$k$代入求值 求出的值对$998244353$取模 输入输出格 ...

  7. LG4781 【模板】拉格朗日插值 和 JLOI2016 成绩比较

    [模板]拉格朗日插值 题目描述 由小学知识可知,$n$个点$(x_i,y_i)$可以唯一地确定一个多项式 现在,给定$n$个点,请你确定这个多项式,并将$k$代入求值 求出的值对$998244353$ ...

  8. luogu P4948 数列求和 推式子 简单数学推导 二项式 拉格朗日插值

    LINK:数列求和 每次遇到这种题目都不太会写.但是做法很简单. 终有一天我会成功的. 考虑类似等比数列求和的东西 帽子戏法一下. 设\(f(k)=\sum_{i=1}^ni^ka^i\) 考虑\(a ...

  9. luogu P5667 拉格朗日插值2 拉格朗日插值 多项式多点求值 NTT

    LINK:P5667 拉格朗日插值2 给出了n个连续的取值的自变量的点值 求 f(m+1),f(m+2),...f(m+n). 如果我们直接把f这个函数给插值出来就变成了了多项式多点求值 这个难度好像 ...

随机推荐

  1. [转帖]SSH远程登录配置文件sshd_config详解

    SSH远程登录配置文件sshd_config详解 2016年06月02日 17:42:25 Field_Yang 阅读数 61386   版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权 ...

  2. rownum伪行号-排行榜-分页

    rownum伪行号-排行榜-分页 1.rownum 是oracle数据库特有的一个特性,它针对每一个查询(包括子查询),都会生成一个rownum用于对该次查询进行编号 2.每个rownum只针对当前s ...

  3. Reactor 线程模型以及在netty中的应用

    这里我们需要理解的一点是Reactor线程模型是基于同步非阻塞IO实现的.对于异步非阻塞IO的实现是Proactor模型. 一 Reactor 单线程模型 Reactor单线程模型就是指所有的IO操作 ...

  4. Idea中Smart Tomcat插件启动报NullPointerException问题

    如果你跟我一样用的是Idea Community社区版的话,也一定会遇到用Smart Tomcat插件启动报错的问题: 这个问题网上搜了一圈,大家好像也都遇到过了,不过也都没有找到原因和给出解决方案. ...

  5. 集成第三方框架,报错NoSuchFieldError:logger

    logger项目中使用springboot的版本是2.0.1.RELEASE,该版本依赖的spring版本为5.0.5.RELEASE (logger在spring版本5.0.7.RELEASE中), ...

  6. vue之多页面的开发

    我们平常用vue开发的时候总觉得vue好像就是专门为了单页面应用而诞生的,其实不是.因为vue在工程化开发的时候很依赖webpack,而webpack是将所有的资源整合到一块,弄成一个单页面.但是vu ...

  7. QT调用CHM方法

    QDesktopServices desktopServices;QString strUrl=QCoreApplication::applicationDirPath () ;strUrl=QStr ...

  8. vue学习(7)-路由抽离

    cnpm i vue-router -S

  9. jstl的forEach 循环

    jstl的forEach循环一般有两种格式 1.当需要操作循环的下标时,或者需要固定循环的次数时: <c:forEach begin="0" end="5" ...

  10. oracle索引查询

    /*<br>* *查看目标表中已添加的索引 * */ --在数据库中查找表名 select * from user_tables where  table_name like 'table ...