原题链接:https://www.luogu.org/problemnew/show/P4781

拉格朗日插值

题目背景

这是一道模板题

题目描述

由小学知识可知, nnn 个点 (xi,yi)" role="presentation" style="position: relative;">(xi,yi)(xi,yi)(x_i,y_i) 可以唯一地确定一个多项式。

现在,给定 nnn 个点,请你确定这个多项式,并将 k" role="presentation" style="position: relative;">kkk代入求值。

求出的值对 998244353998244353998244353 取模。

输入输出格式
输入格式:

第一行两个正整数 n,kn,kn,k,含义如题。

接下来 nnn 行,每行两个正整数 xi,yi" role="presentation" style="position: relative;">xi,yixi,yix_i,y_i ,含义如题。

输出格式:

一个整数表示答案

输入输出样例
输入样例#1:

3 100
1 4
2 9
3 16

输出样例#1:

10201

输入样例#2:

3 100
1 1
2 2
3 3

输出样例#2:

100

说明

n≤2000xi,yi,k≤998244353n≤2000xi,yi,k≤998244353n \leq 2000 \; \; \; x_i,y_i,k \leq 998244353

样例一中的三个点确定的多项式是 f(x)=x2+2x+1f(x)=x2+2x+1f(x)=x^2+2x+1,将 100100100 代入求值得到 102011020110201。

样例二中的三个点确定的多项式是 f(x)=xf(x)=xf(x)=x ,将 100100100 代入求值得到 100100100。

如果你不会拉格朗日插值,你可以到这里去学习一下。

此外,请注意算法的常数问题,建议开启O2优化。

题解

所谓lagrangelagrange\mathcal{lagrange}插值法核心就是下面的公式,我们可以通过这个公式求出唯一的一个n−1n−1n-1阶多项式,使得多项式的函数图像经过给定的nnn个点:

f(x)=∑i=1nyi∏j=1,j≠inx−xjxi−xj" role="presentation" style="text-align: center; position: relative;">f(x)=∑i=1nyi∏j=1,j≠inx−xjxi−xjf(x)=∑i=1nyi∏j=1,j≠inx−xjxi−xj

f(x)=\sum_{i=1}^ny_i\prod_{j=1,j\neq i}^n\frac{x-x_j}{x_i-x_j}

这个式子看起来非常复杂,实际上本质非常简明,设g(x)=∏nj=1,j≠ix−xjxi−xjg(x)=∏j=1,j≠inx−xjxi−xjg(x)=\prod_{j=1,j\neq i}^n\frac{x-x_j}{x_i-x_j},就有g(xj)=0,g(xi)=1g(xj)=0,g(xi)=1g(x_j)=0,g(x_i)=1,实际上其他的xxx都会被消掉,只有g(xi)" role="presentation" style="position: relative;">g(xi)g(xi)g(x_i)才有值,所以这个多项式表示的函数图像能经过给出的所有点。

唯一性的证明:通过待定系数法列出方程后,系数矩阵是范德蒙德矩阵,存在逆矩阵,因而解具有唯一性。

lagrangelagrange\mathcal{lagrange}插值法告诉我们:nnn个点可以确定一个唯一的项数不超过点数的多项式,这一点非常重要,这种用点描述多项式的形式称为多项式的点值形式,从点值变成系数式的过程称为插值。

对于这道题来说,我们就不需要一一算出每一项的系数,只需要把k" role="presentation" style="position: relative;">kkk代入f(x)f(x)f(x),按照公式枚举一下i,ji,ji,j就能在O(n2)O(n2)O(n^2)的时间内算出f(k)f(k)f(k)的值。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=2e4+5,mod=998244353;
int n,k,x[M],y[M];
void in(){scanf("%d%d",&n,&k);for(int i=1;i<=n;++i)scanf("%d%d",&x[i],&y[i]);}
int power(int a,int p){if(p==1)return a;int hh=power(a,p/2);return (p&1)?1ll*hh*hh%mod*a%mod:1ll*hh*hh%mod;}
int lagrange(int n,int k)
{int ans=0,s1,s2;for(int i=1;i<=n;++i){s1=s2=1;for(int j=1;j<=n;++j){if(i==j)continue;s1=1ll*s1*(k-x[j])%mod;s2=1ll*s2*(x[i]-x[j])%mod;}ans=(ans+1ll*y[i]*s1%mod*power(s2,mod-2))%mod;}return ans<0?ans+mod:ans;
}
void ac(){printf("%d",lagrange(n,k));}
int main(){in();ac();}

Luogu4781 【模板】拉格朗日插值相关推荐

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

    传送门 把公式实现一下即可: 当xxx连续的时候可以优化为O(N)O(N)O(N). // Problem: P4781 [模板]拉格朗日插值 // Contest: Luogu // URL: ht ...

  2. 模板:拉格朗日插值(多项式)

    所谓拉格朗日插值,就是在"拉格朗日"进行的一项民俗活动.拉格朗日通常在每年2月的第82个星期三. (逃) 前言 非常强大的算法. 当可以证明某个函数是一个 kkk 次多项式时,我们 ...

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

    题目传送门 参考:拉格朗日插值 学习笔记 代码: #include<bits/stdc++.h> using namespace std;typedef long long ll; con ...

  4. BZOJ 2137 submultiple(约数,拉格朗日插值求自然数k次幂和)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2137 是 hydro 的 BZOJ ...

  5. P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值) Problem Sol ...

  6. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  7. 牛客挑战赛36 D. 排名估算( “概率论全家桶”,好题,拉格朗日插值求自然数 k 次幂之和)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/3782/D ...

  8. P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P5667 Prob ...

  9. 【学习笔记】拉格朗日插值

    整理的算法模板合集: ACM模板 目录 P4781 [模板]拉格朗日插值 重心拉格朗日插值法 拉格朗日插值法求系数 自然数k次幂的和 点我看多项式全家桶(●'◡'●) P4781 [模板]拉格朗日插值 ...

  10. 拉格朗日插值的优缺点_「笔记」拉格朗日插值

    简介 对于 \(k\) 次多项式函数 \(F(x)\). 若已知 \(k+1\) 个点值,则可构造出多项式. 有: \[F(x) = \sum_{i=1}^{k+1}y_i\prod_{i\not = ...

最新文章

  1. 导致美国大范围网络瘫痪的Mirai僵尸网络
  2. jsp页面返回文本时产生大量空格的解决办法
  3. 腾讯数据中心负责人揭秘:半年时间如何搭好“山洞鹅厂”
  4. 抓rtmp推流地址_如何实现摄像机竖屏直播推流?
  5. IBM技术大会2005
  6. java线程太多卡顿_性能优化之卡顿延迟
  7. 网页设计图片向上浮动_利用js实现图片在浏览器中飘动(浮动窗口自由移动)效果...
  8. jq匹配偶数行_jquery怎么实现奇偶行不同背景颜色?
  9. 布谷鸟沙盒分析静态文件_“案例沙盒方法”喜提国际商学院协会(AACSB)2019年启发式创新奖...
  10. 如何应对糟糕的面试官(2)
  11. mysql存储过程if多命令_MySQL存储过程if-存储过程中的if-db2存储过程if多条件
  12. 关于PHP页面显示乱码问题的解决
  13. 连通性问题--Algorithms IN C读书笔记
  14. 树莓派上使用QT+ffmpeg进行音频编码+部署自启动+双击不启动问题
  15. pyspark分类算法之决策树分类器模型实践【decisionTreeClassifier】
  16. 发言倒计时器_北京会议发言计时器 会议发言提醒器 赛事发言倒计时器
  17. js实现城市拼音首字母排序
  18. 西门子S7-200的PLC,CPU224XP的模拟量接线怎样接
  19. NXP的CLRC663和ST的M24LR04通信时所遇到的问题
  20. Win10下安装Detectron2,超详细教程!

热门文章

  1. LaTeX报错 Difference (2) between bookmark levels is greater (hyperref) than one, level fixed.
  2. 378.有序矩阵中第k小的元素(力扣leetcode) 博主可答疑该问题
  3. html自动旋转屏幕,求教!HTML5屏幕旋转90度再让画布自适应,该如何做,大神给留demo...
  4. 《Web漏洞防护》读书笔记——第6章,XXE防护
  5. linux 输入法框架xim,基于XIM协议的输入法原理与实现
  6. 简单的避免idea自动导入 *
  7. mysql.5.7 declare_MySQL-5.7 游标及DECLARE
  8. js之数组去重的方法
  9. 【转】JMeter Tutorial的安装和具体操作
  10. C#的百度地图开发(四)前端显示与定位