CF1817C Similar Polynomials 题解
Div.1 C 拉格朗日差值,赛时开香槟。
UPD:有个地方打错了,已经更正。
题目大意
给定 次两个多项式 。求 ,使得 ,保证 存在。
给出多项式的形式为给出 模 的值。
。
题目解析
考虑 ,展开 。
发现 和 最高位系数相同(记位 ),并且只要知道第二高位 ,那么就有
。
所以关键在于求这三个数字。
考虑拉格朗日插值(考虑 ,这里直接带入)
最高项系数为
第二高项系数为
预处理 逆元即可,。
int n; ll a[maxn],b[maxn],fact[maxn],inv[maxn],k,k1,k2; ll fpow(ll x,ll y){ ll tmp=x,res=1; while(y){ if(y&1) res=res*tmp%MOD; y>>=1; tmp=tmp*tmp%MOD; } return res; } ll getk(int d,ll *p){ ll ans=0; int i; for(i=0;i<=d;i++){ ll t=p[i]*inv[i]%MOD*inv[d-i]%MOD; if((d-i)&1) t=MOD-t; ans=(ans+t)%MOD; } return ans; } ll getk2(int d,ll *p){ ll ans=0; int i; for(i=0;i<=d;i++){ ll t=(1ll*d*(d+1)/2-i)%MOD*p[i]%MOD*inv[i]%MOD*inv[d-i]%MOD; if((d-i)&1) t=MOD-t; ans=(ans+t)%MOD; } return MOD-ans; } int main(){ #ifdef LOCAL freopen("1.in","r",stdin); #endif n=read(); int i; for(i=0;i<=n;i++) a[i]=read(); for(i=0;i<=n;i++) b[i]=read(); fact[0]=1; for(i=1;i<=n;i++) fact[i]=fact[i-1]*i%MOD; inv[n]=fpow(fact[n],MOD-2); for(i=n-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%MOD; k=getk(n,a); k1=getk2(n,a); k2=getk2(n,b); print((k2-k1+MOD)%MOD*fpow(k*n%MOD,MOD-2)%MOD); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-05-02 CF1648C Tyler and Strings 题解