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

  5
  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
  5

HINT

  1<=k<=123
  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

 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 [拉格朗日插值法]相关推荐

  1. 拉格朗日插值法及应用

    拉格朗日插值法 一般方法 重心拉格朗日插值法 应用 bzoj4559:成绩比较 bzoj2655: calc bzoj3453:XLkxc 拉格朗日插值法 快速根据点值逼近函数 在取点大于nnn的情况 ...

  2. rstudio拉格朗日插值法_拉格朗日插值法学习笔记

    拉格朗日插值法是一个根据点对求回原函数的算法,原理挺好懂的. 原理和优化方法上面的大佬都讲得很好. 其实主要就是这个式子: 然后暴力算这个式子的话是每求一项f(k)的时间复杂度都是n^2. 这个时间很 ...

  3. Python实现拉格朗日插值法

    已知sinx的一组x,y对应关系,用拉格朗日插值法估计sin(0.3367)的值. x x0.32 0.34 0.36 y 0.314567 0.333487 0.352274 / / class I ...

  4. 拉格朗日插值法(Lagrange插值法)

    插值介绍: 在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点. 插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值. 这是百度百 ...

  5. 2021-01-07 matlab数值分析  插值法 拉格朗日插值法 牛顿插值法

    matlab数值分析  插值法 1 拉格朗日插值法 function yh=lagrange(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); for ...

  6. 拉格朗日c语言实验报告,拉格朗日插值法C语言的实现(实验报告)(9页)-原创力文档...

    韩山师范学院 C语言程序设计 实验名称: 实验一:拉格朗日插值法C语言的实现 日期: 2011-9-19 任课教师: 赖国明 专业: 数学与应用数学 学号: 2009111437 姓名: 郑永锋 [实 ...

  7. 拉格朗日插值法matlab上机,拉格朗日插值法使用MATLAB做的例题

    <拉格朗日插值法使用MATLAB做的例题>由会员分享,可在线阅读,更多相关<拉格朗日插值法使用MATLAB做的例题(2页珍藏版)>请在人人文库网上搜索. 1.一物体廓线数据如下 ...

  8. 拉格朗日插值法(Lagrange)

    拉格朗日插值法是基于基函数的插值方法,插值多项式可以表示为: 其中称为 i 次基函数 Matlab中拉格朗日插值法函数为:Language 功能:求已知点数据点的拉格朗日多项式 调用格式:f=Lagr ...

  9. 缺失值处理 - 拉格朗日插值法 - Python代码

    目录 缺失值处理 拉格朗日差值法的理论基础 拉格朗日插值法代码实现 其他数据预处理方法 缺失值处理 处理缺失值常用的办法可分为三类:删除记录.数据插补.不处理. 其中常见的数据插补法有: 如果通过删除 ...

最新文章

  1. java基础---JVM---java内存区域与内存溢出问题
  2. php7 变量,变量在PHP7内部的实现(一)
  3. 5.3.1计算机网络传输层之TCP可靠传输
  4. C++bidirectional dijkstra双向最短路径算法(附完整源码)
  5. java学习笔记2022.2.11
  6. PHP课程第一次实验作业提交
  7. 高并发中,那些不得不说的线程池与ThreadPoolExecutor类
  8. mysql 定义唯一约束_在MySQL中,定义唯一约束的基本语法格式是【】
  9. pytho tkinter 应用第一个窗口
  10. 不是吧?!程序员月入10w,原因竟然是这个......
  11. s1200 博图高速脉冲计数值没有变化_如何实现SIMATIC S7-1200的高速计数器(HSC)软件门控制?...
  12. Sessions and Processes
  13. 英特尔中国研究院院长宋继强:摩尔定律的经济效益仍在继续
  14. Python入门之面向对象module,library,package之间区别
  15. linux显卡测试radeon,15款热门显卡对比:Radeon RX 6800系列在Linux 1440p环境下表现出色...
  16. QListView自定义Item
  17. 学生健康管理软件/中小学体检数据管理系统
  18. gmap 支持python吗_Python:地图上的标记标签使用gmap.marker_层使用hover_-tex选项不工作...
  19. 常见网站底部友情链接代码示例
  20. Spring Cloud Open Feign系列【23】OAuth2FeignRequestInterceptor、BasicAuthRequestInterceptor拦截器解析

热门文章

  1. 10tb服务器硬盘 选购,2017最靠谱大容量机械硬盘选购指南(基于Backblaze硬盘寿命可靠性报告)...
  2. gis中开始编辑之后显示空间参考_空间参考—帮助 | ArcGIS Desktop
  3. linux grpc,grpc linux下的编译使用-Go语言中文社区
  4. php sql server临时表,SQLServer中临时表与表变量的区别分析
  5. 数组输出黑科技----fwrite()
  6. [深度学习]理解RNN, GRU, LSTM 网络
  7. 关于新的描述语言GEZEL的介绍
  8. excel的快捷键ctrl+;无效
  9. 【人体姿态估计1】Convolutional Pose Machines_2016
  10. gan学到的是什么_GAN推动生物学研究