【BZOJ3453】XLkxc [拉格朗日插值法]
XLkxc
Time Limit: 20 Sec Memory Limit: 128 MB
[Submit][Status][Discuss]
Description
给定 k,a,n,d,p
f(i)=1^k+2^k+3^k+......+i^k
g(x)=f(1)+f(2)+f(3)+....+f(x)
求(g(a)+g(a+d)+g(a+2d)+......+g(a+nd))mod p
Input
第一行数据组数,(保证小于6)
以下每行四个整数 k,a,n,d
Output
每行一个结果。
Sample Input
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
Sample Output
5
5
5
5
HINT
0<=a,n,d<=123456789
p==1234567891
Main idea
给定k,a,n,d,求
Solution
我们可以令
然后推一波式子,再令
那么显然有
然后我们通过若干次差分,发现g在差分k+3次时全为0,那么g就是一个k+2次多项式;f在差分k+5次时全为0,那么f就是一个k+4次多项式。
我们通过拉格朗日插值法插g,得到k+5个f的值,然后再插值f就可以得到答案了。
Code
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdio> 5 #include<cstring> 6 #include<cstdlib> 7 #include<cmath> 8 using namespace std; 9 typedef long long s64; 10 const int ONE=1001; 11 const s64 MOD=1234567891; 12 13 int T; 14 int k,a,n,d; 15 int g[ONE],f[ONE]; 16 int inv[ONE],U[ONE],Jc[ONE]; 17 int pre[ONE],suc[ONE]; 18 19 int get() 20 { 21 int res=1,Q=1; char c; 22 while( (c=getchar())<48 || c>57) 23 if(c=='-')Q=-1; 24 if(Q) res=c-48; 25 while((c=getchar())>=48 && c<=57) 26 res=res*10+c-48; 27 return res*Q; 28 } 29 30 int Quickpow(int a,int b) 31 { 32 int res=1; 33 while(b) 34 { 35 if(b&1) res=(s64)res*a%MOD; 36 a=(s64)a*a%MOD; 37 b>>=1; 38 } 39 return res; 40 } 41 42 int P(int k,int i) 43 { 44 if((k-i)&1) return -1+MOD; 45 return 1; 46 } 47 48 namespace First 49 { 50 void Deal_jc(int k) 51 { 52 Jc[0]=1; 53 for(int i=1;i<=k;i++) Jc[i]=(s64)Jc[i-1]*i%MOD; 54 } 55 56 void Deal_inv(int k) 57 { 58 inv[0]=1; inv[k]=Quickpow(Jc[k],MOD-2); 59 for(int i=k-1;i>=1;i--) inv[i]=(s64)inv[i+1]*(i+1)%MOD; 60 } 61 } 62 63 int Final(int f[],int n,int k) 64 { 65 pre[0]=1; for(int i=1;i<=k;i++) pre[i]=(s64)pre[i-1] * (n-i+MOD) % MOD; 66 suc[0]=1; for(int i=1;i<=k;i++) suc[i]=(s64)suc[i-1] * (s64)(n-k+i-1+MOD) % MOD; 67 68 s64 Ans=0; 69 for(int i=1;i<=k;i++) 70 { 71 int Up= (s64) pre[i-1]*suc[k-i] % MOD * f[i] % MOD; 72 int Down= (s64) inv[i-1]*inv[k-i] % MOD; 73 74 Ans=(s64)(Ans + (s64) Up*Down % MOD * P (k,i) %MOD) % MOD; 75 } 76 77 return Ans; 78 } 79 80 int main() 81 { 82 First::Deal_jc(150); First::Deal_inv(150); 83 T=get(); 84 while(T--) 85 { 86 k=get(); a=get(); n=get(); d=get(); 87 88 for(int i=0;i<=k+3;i++) g[i]=Quickpow(i,k); 89 for(int i=1;i<=k+3;i++) g[i]=((s64)g[i-1]+g[i])%MOD; 90 for(int i=1;i<=k+3;i++) g[i]=((s64)g[i-1]+g[i])%MOD; 91 for(int i=0;i<=k+5;i++) 92 f[i]=((s64)f[i-1]+Final(g,(a+(s64)i*d)%MOD,k+3)) % MOD; 93 94 printf("%d\n",Final(f,n,k+5)%MOD); 95 } 96 }
View Code
转载于:https://www.cnblogs.com/BearChild/p/6424353.html
【BZOJ3453】XLkxc [拉格朗日插值法]相关推荐
- 拉格朗日插值法及应用
拉格朗日插值法 一般方法 重心拉格朗日插值法 应用 bzoj4559:成绩比较 bzoj2655: calc bzoj3453:XLkxc 拉格朗日插值法 快速根据点值逼近函数 在取点大于nnn的情况 ...
- rstudio拉格朗日插值法_拉格朗日插值法学习笔记
拉格朗日插值法是一个根据点对求回原函数的算法,原理挺好懂的. 原理和优化方法上面的大佬都讲得很好. 其实主要就是这个式子: 然后暴力算这个式子的话是每求一项f(k)的时间复杂度都是n^2. 这个时间很 ...
- Python实现拉格朗日插值法
已知sinx的一组x,y对应关系,用拉格朗日插值法估计sin(0.3367)的值. x x0.32 0.34 0.36 y 0.314567 0.333487 0.352274 / / class I ...
- 拉格朗日插值法(Lagrange插值法)
插值介绍: 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点. 插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值. 这是百度百 ...
- 2021-01-07 matlab数值分析 插值法 拉格朗日插值法 牛顿插值法
matlab数值分析 插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...
- 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...
韩山师范学院 C语言程序设计 实验名称: 实验一:拉格朗日插值法C语言的实现 日期: 2011-9-19 任课教师: 赖国明 专业: 数学与应用数学 学号: 2009111437 姓名: 郑永锋 [实 ...
- 拉格朗日插值法matlab上机,拉格朗日插值法使用MATLAB做的例题
<拉格朗日插值法使用MATLAB做的例题>由会员分享,可在线阅读,更多相关<拉格朗日插值法使用MATLAB做的例题(2页珍藏版)>请在人人文库网上搜索. 1.一物体廓线数据如下 ...
- 拉格朗日插值法(Lagrange)
拉格朗日插值法是基于基函数的插值方法,插值多项式可以表示为: 其中称为 i 次基函数 Matlab中拉格朗日插值法函数为:Language 功能:求已知点数据点的拉格朗日多项式 调用格式:f=Lagr ...
- 缺失值处理 - 拉格朗日插值法 - Python代码
目录 缺失值处理 拉格朗日差值法的理论基础 拉格朗日插值法代码实现 其他数据预处理方法 缺失值处理 处理缺失值常用的办法可分为三类:删除记录.数据插补.不处理. 其中常见的数据插补法有: 如果通过删除 ...
最新文章
- java基础---JVM---java内存区域与内存溢出问题
- php7 变量,变量在PHP7内部的实现(一)
- 5.3.1计算机网络传输层之TCP可靠传输
- C++bidirectional dijkstra双向最短路径算法(附完整源码)
- java学习笔记2022.2.11
- PHP课程第一次实验作业提交
- 高并发中,那些不得不说的线程池与ThreadPoolExecutor类
- mysql 定义唯一约束_在MySQL中,定义唯一约束的基本语法格式是【】
- pytho tkinter 应用第一个窗口
- 不是吧?!程序员月入10w,原因竟然是这个......
- s1200 博图高速脉冲计数值没有变化_如何实现SIMATIC S7-1200的高速计数器(HSC)软件门控制?...
- Sessions and Processes
- 英特尔中国研究院院长宋继强:摩尔定律的经济效益仍在继续
- Python入门之面向对象module,library,package之间区别
- linux显卡测试radeon,15款热门显卡对比:Radeon RX 6800系列在Linux 1440p环境下表现出色...
- QListView自定义Item
- 学生健康管理软件/中小学体检数据管理系统
- gmap 支持python吗_Python:地图上的标记标签使用gmap.marker_层使用hover_-tex选项不工作...
- 常见网站底部友情链接代码示例
- Spring Cloud Open Feign系列【23】OAuth2FeignRequestInterceptor、BasicAuthRequestInterceptor拦截器解析
热门文章
- 10tb服务器硬盘 选购,2017最靠谱大容量机械硬盘选购指南(基于Backblaze硬盘寿命可靠性报告)...
- gis中开始编辑之后显示空间参考_空间参考—帮助 | ArcGIS Desktop
- linux grpc,grpc linux下的编译使用-Go语言中文社区
- php sql server临时表,SQLServer中临时表与表变量的区别分析
- 数组输出黑科技----fwrite()
- [深度学习]理解RNN, GRU, LSTM 网络
- 关于新的描述语言GEZEL的介绍
- excel的快捷键ctrl+;无效
- 【人体姿态估计1】Convolutional Pose Machines_2016
- gan学到的是什么_GAN推动生物学研究