Luogu4781 【模板】拉格朗日插值
原题链接: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)=\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 【模板】拉格朗日插值相关推荐
- P4781 【模板】拉格朗日插值
传送门 把公式实现一下即可: 当xxx连续的时候可以优化为O(N)O(N)O(N). // Problem: P4781 [模板]拉格朗日插值 // Contest: Luogu // URL: ht ...
- 模板:拉格朗日插值(多项式)
所谓拉格朗日插值,就是在"拉格朗日"进行的一项民俗活动.拉格朗日通常在每年2月的第82个星期三. (逃) 前言 非常强大的算法. 当可以证明某个函数是一个 kkk 次多项式时,我们 ...
- 洛谷 P4781 【模板】拉格朗日插值
题目传送门 参考:拉格朗日插值 学习笔记 代码: #include<bits/stdc++.h> using namespace std;typedef long long ll; con ...
- BZOJ 2137 submultiple(约数,拉格朗日插值求自然数k次幂和)【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2137 是 hydro 的 BZOJ ...
- P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值) Problem Sol ...
- 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
- 牛客挑战赛36 D. 排名估算( “概率论全家桶”,好题,拉格朗日插值求自然数 k 次幂之和)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/3782/D ...
- P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P5667 Prob ...
- 【学习笔记】拉格朗日插值
整理的算法模板合集: ACM模板 目录 P4781 [模板]拉格朗日插值 重心拉格朗日插值法 拉格朗日插值法求系数 自然数k次幂的和 点我看多项式全家桶(●'◡'●) P4781 [模板]拉格朗日插值 ...
- 拉格朗日插值的优缺点_「笔记」拉格朗日插值
简介 对于 \(k\) 次多项式函数 \(F(x)\). 若已知 \(k+1\) 个点值,则可构造出多项式. 有: \[F(x) = \sum_{i=1}^{k+1}y_i\prod_{i\not = ...
最新文章
- 导致美国大范围网络瘫痪的Mirai僵尸网络
- jsp页面返回文本时产生大量空格的解决办法
- 腾讯数据中心负责人揭秘:半年时间如何搭好“山洞鹅厂”
- 抓rtmp推流地址_如何实现摄像机竖屏直播推流?
- IBM技术大会2005
- java线程太多卡顿_性能优化之卡顿延迟
- 网页设计图片向上浮动_利用js实现图片在浏览器中飘动(浮动窗口自由移动)效果...
- jq匹配偶数行_jquery怎么实现奇偶行不同背景颜色?
- 布谷鸟沙盒分析静态文件_“案例沙盒方法”喜提国际商学院协会(AACSB)2019年启发式创新奖...
- 如何应对糟糕的面试官(2)
- mysql存储过程if多命令_MySQL存储过程if-存储过程中的if-db2存储过程if多条件
- 关于PHP页面显示乱码问题的解决
- 连通性问题--Algorithms IN C读书笔记
- 树莓派上使用QT+ffmpeg进行音频编码+部署自启动+双击不启动问题
- pyspark分类算法之决策树分类器模型实践【decisionTreeClassifier】
- 发言倒计时器_北京会议发言计时器 会议发言提醒器 赛事发言倒计时器
- js实现城市拼音首字母排序
- 西门子S7-200的PLC,CPU224XP的模拟量接线怎样接
- NXP的CLRC663和ST的M24LR04通信时所遇到的问题
- Win10下安装Detectron2,超详细教程!
热门文章
- LaTeX报错 Difference (2) between bookmark levels is greater (hyperref)	than one, level fixed.
- 378.有序矩阵中第k小的元素(力扣leetcode) 博主可答疑该问题
- html自动旋转屏幕,求教!HTML5屏幕旋转90度再让画布自适应,该如何做,大神给留demo...
- 《Web漏洞防护》读书笔记——第6章,XXE防护
- linux 输入法框架xim,基于XIM协议的输入法原理与实现
- 简单的避免idea自动导入 *
- mysql.5.7 declare_MySQL-5.7 游标及DECLARE
- js之数组去重的方法
- 【转】JMeter Tutorial的安装和具体操作
- C#的百度地图开发(四)前端显示与定位