[Contest20180316]Mythological IV
令$S(n)=\sum\limits_{i=0}^{n-1}f(i)q^i$,那么存在一个次数$\leq k$的多项式使得$S(n)=q^ng(n)-g(0)$(证明来自杜教的PPT)
设$f$的次数为$d$,对$d$归纳
当$d=0$时,取$g(n)=\dfrac{f(0)}{q-1}$可使其成立
假设当$d=k-1$时,命题成立
当$d=k$时,有$S(n)=\sum\limits_{i=0}^{n-1}f(i)q^i$和$qS(n)=\sum\limits_{i=0}^{n-1}f(i)q^{i+1}=\sum\limits_{i=1}^nf(i-1)q^i$
将两式相减,得到$(q-1)S(n)=f(n-1)q^n-f(0)+\sum\limits_{i=1}^{n-1}\left[f(i-1)-f(i)\right]q^i$
因为$f(i-1)-f(i)$是一个$k-1$次多项式,所以$\sum\limits_{i=0}^{n-1}\left[f(i-1)-f(i)\right]q^i$可以被表示为$q^nh(n)-h(0)$,其中$h(x)$是一个次数$\leq k-1$的多项式
代回原式继续处理
$\begin{align*}(q-1)S(n)&=f(n-1)q^n-f(0)+q^nh(n)-h(0)\\S(n)&=q^n\dfrac{f(n-1)+h(n)}{q-1}-\dfrac{f(0)+h(0)}{q-1}\end{align*}$
令$F(n)=\dfrac{f(n-1)+h(n)}{q-1},c=\dfrac{f(0)+h(0)}{q-1}$,那么原式变为$S(n)=q^nF(n)-c$
因为$S(0)=0$,所以$F(0)-c=0$,即$c=F(0)$
而$F(n)$是一个$k$次多项式(含$f$)
所以当$d=k$时,命题成立
有了这个定理,我们可以做一番推导
一方面,由$S(n)$的定义,$S(n)-S(n-1)=q^{n-1}f(n-1)$,另一方面,由上述定理,$S(n)-S(n-1)=q^ng(n)-q^{n-1}g(n-1)$,联立起来我们可以得到$qg(n)=f(n-1)+g(n-1)$
如果我们知道了$g(0)$,那么$g(1)\cdots g(k+1)$都可求得
不妨设$g(0)$为一个未知数,那么$g(1)\cdots g(k+1)$都是关于$f(0)$的一次函数
另一方面,$k$次多项式$g(x)$的$k+1$阶差分等于$0$,即$\triangle^{k+1}g(x)=\sum\limits_{i=0}^{k+1}(-1)^i\binom{k+1}ig(x-i)=0$
代入$k+1$,我们得到$\sum\limits_{i=0}^{k+1}(-1)^i\binom{k+1}ig(k+1-i)=0$,它是关于$g(0)$的一元一次方程,直接解即可
于是我们得到了$g(0)\cdots g(k+1)$,使用线性插值的技巧,我们可以做到在$O(k)$的时间内求出$g(n)$
关于线性插值,这里不展开讲,只放一个miskcoo的博客和公式(推荐去看他的博客,推导过程挺好玩的)
设$k$次多项式为$P(x)$,已经知道$P(0)\cdots P(k)$,则$P(x)=\sum\limits_{j=0}^k(-1)^{k-j}\binom xj\binom{x-j-1}{k-j}P(j)$
第一个组合数预处理,第二个组合数从大到小枚举$j$的时候迭代计算
于是这道题就做完了,总复杂度$O(k)$,真是奇妙
#include<stdio.h>
typedef long long ll;
const int mod=1000000007;
int mul(int a,int b){return a*(ll)b%mod;}
int ad(int a,int b){return(a+b)%mod;}
int de(int a,int b){return(a-b)%mod;}
ll n;
int k,q,invq,fac[500010],rfac[500010],inv[500010],f[500010],G[500010],cn[500010];
int C(int n,int k){return mul(fac[n],mul(rfac[n-k],rfac[k]));}
int pow(int a,ll b){int s=1;while(b){if(b&1)s=mul(s,a);a=mul(a,a);b>>=1;}return s;
}
struct single{int x,c;single(int a=0,int b=0){x=a;c=b;}
}g[500010],s;
single operator+(single a,single b){return single(ad(a.x,b.x),ad(a.c,b.c));}
single operator+(single a,int b){return single(a.x,ad(a.c,b));}
single operator*(single a,int b){return single(mul(a.x,b),mul(a.c,b));}
int main(){int i,t,c,gn;scanf("%lld%d%d",&n,&k,&q);for(i=0;i<=k;i++)scanf("%d",f+i);fac[0]=1;for(i=1;i<=k+1;i++)fac[i]=mul(fac[i-1],i);rfac[k+1]=pow(fac[k+1],mod-2);for(i=k+1;i>0;i--)rfac[i-1]=mul(rfac[i],i);for(i=1;i<=k+1;i++)inv[i]=mul(rfac[i],fac[i-1]);g[0].x=1;invq=pow(q,mod-2);for(i=1;i<=k+1;i++)g[i]=(g[i-1]+f[i-1])*invq;t=1;for(i=0;i<=k+1;i++){s=s+((g[k+1-i]*C(k+1,i))*t);t=-t;}G[0]=mul(-s.c,pow(s.x,mod-2));for(i=1;i<=k;i++)G[i]=mul(ad(G[i-1],f[i-1]),invq);cn[0]=1;n++;for(i=0;i<k;i++)cn[i+1]=mul(cn[i],mul((n-i)%mod,inv[i+1]));c=1;t=1;gn=0;for(i=k;i>=0;i--){gn=ad(gn,mul(mul(G[i],cn[i]),mul(t,c)));t=-t;c=mul(c,mul((n-i)%mod,inv[k-i+1]));}gn=de(mul(pow(q,n),gn),G[0]);if(gn<0)gn+=mod;printf("%d",gn);
}
转载于:https://www.cnblogs.com/jefflyy/p/8585389.html
[Contest20180316]Mythological IV相关推荐
- (札记)Altera Stratix IV系列FPGA TRUE LVDS RX input termination 在Quartus工程中的设置方法...
Altera Stratix IV系列FPGA Row bank的TRUE LVDS_RX支持oct(on chip termination),所以设计的时候不需要外接一个100ohm电阻.备注:我使 ...
- R语言基于信息价值IV(Information Value)和证据权重WOE(Weights of Evidence)进行特征筛选(feature selection)
R语言基于信息价值IV(Information Value)和证据权重WOE(Weights of Evidence)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集 ...
- 评分卡模型、WOE(Weight of Evidence)和IV(Information Value)
WOE(Weight of Evidence) IV(Information Value) 在机器学习的二分类问题中,IV值(Information Value)主要用来对输入变量进行编码和预测能力评 ...
- LeetCode 653. Two Sum IV - Input is a BST--Python解法
题目地址:Two Sum IV - Input is a BST - LeetCode Given a Binary Search Tree and a target number, return t ...
- python最优分箱计算iv值_Python计算woe和iv值
计算逻辑 先计算WOE值,再计算IV值. 其中Y或N分别是YES,NO,反应在因变量中,就是1和0. Yi是第i组中1的个数,YT是所有(Total)为1的个数. Ni是第i组中0的个数,NT是所有( ...
- SAP HUM 嵌套HU初探 IV
SAP HUM 嵌套HU初探 IV 事务代码HUMO(HU Monitor报表)结果里,单层HU和嵌套HU的结果有啥不同? 1)单层HU的HUMO Monitor结果 2)嵌套HU的HUMO Moni ...
- SAP MM GR-based IV, 无GR不能IV?
SAP MM GR-based IV, 无GR不能IV? 如下的采购订单, 没有做过收货, ITEM的details里却勾选了'GR-Bsd IV' 选项. 此时试图直接针对该PO#450260713 ...
- SAP MM IV中的Duplicated Invoice Check功能的测试
SAP MM IV中的Duplicated Invoice Check功能的测试 进入如下界面: 比如1000公司代码下我勾选了Check Company Code和Check Reference标记 ...
- [分类整理IV]微软等100题系列V0.1版:字符串+数组面试题集锦
微软等100题系列V1.0版整理IV:字符串+数组面试题集锦 July 2010年12月30日 第4章 字符串+数组面试题 在微软等100题系列V0.1版中,此类字符串+数组的问题,占了足足22道 ...
最新文章
- 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)
- mysql general bin区别_MySQL中几种常见的日志
- Kafka学习 之 第一个例子(一)
- python登录界面实现密码在明文与星号间切换_两个API让星号密码框显示成明文
- 百名花粉神秘参与3个月 荣耀9X满帧挑战计划被爆进入收尾阶段
- VMware Workstation安装RedHat Linux 9
- 我今天学习的技术,明天会不会一钱不值
- excel多列数据生成图分类有间隔
- wps交叉表_WPS Office
- 超分辨率重建双三次插值Bicubic生成高分辨率图像
- PHP爬虫遇到incapsula
- typescript常用编译结果函数__decorate、__matadata、__param、__awaiter
- 第七十六篇 MIPI简单说明
- MySQL 的主从复制(高级篇)
- Python 之亮闪闪的七段数码管
- Dataset的用法简析
- 制作各种docker镜像
- Date日期操作-年月日,时分秒获取
- (原)详解生产线物流规划的原理及操作方式
- 程序员未来的出路究竟在哪里?一位老码农的心声
热门文章
- NoSQL and Redis
- linux小知识之硬盘健康状态检测
- 修改CentOS7网卡名称为传统名称eth0格式(20170711更新)
- yum 搭建 LNMP
- git是航空母舰:ScrumBoard
- Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression
- ASP.NET 中HttpRuntime.Cache缓存数据
- 《github一天一道算法题》:并归排序
- hibernate之 一级缓存和二级缓存
- Python调用外部程序——os.system()和subprocess.call()