CF1696E Placing Jinas 题解
upd on 2022.9.13:好像有点小问题在洛谷评论里面被指出,已经修改。
题目大意
给定一个 单调不增 的序列 ,第 到 项为 ,之后的为全 。
对平面直角坐标系上的每个整点进行染色,对于一个点 如果 那么这个点位白色,否则为黑色。
每次操作你可以使点 上的娃娃数量减一,同时 和 上的娃娃数量都会加一。
现在在 上有一个娃娃,求让所有的白色点上都没有娃娃的操作数量,对 取模。
题目解析
设 为对点 实行的操作次数。
我们发现,当 或者是 的时候,,否则 。
我们发现这个递推式像杨辉三角的递推式,不难得到 。
那么答案就是
但是这样求是 的,所以需要考虑化简这个式子。
注意到
所以答案就是
代码:
int n,a[maxn]; ll fact[maxn],inv[maxn],ans; ll mpow(ll x,ll y){ ll res=1,tmp=x%MOD; while(y){ if(y&1) res=res*tmp%MOD; y>>=1; tmp=tmp*tmp%MOD; } return res; } void init(){ int i; inv[0]=fact[0]=1; for(i=1;i<=N;i++) fact[i]=fact[i-1]*i%MOD; inv[N]=mpow(fact[N],MOD-2); for(i=N-1;i>=1;i--) inv[i]=inv[i+1]*(i+1)%MOD; return; } ll C(int x,int y){ return fact[x]*inv[y]%MOD*inv[x-y]%MOD; } int main(){ n=read(); int i; for(i=0;i<=n;i++) a[i]=read(); init(); for(i=0;i<=n;i++) if(a[i]>=1) ans+=C(a[i]+i,i+1),ans%=MOD; print(ans%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工具