CF1696E Placing Jinas 题解
jiangtaizhe001 · · 题解
可能更好的阅读体验
题目传送门
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;
}