CF1523E Crypto Lights 题解
考虑计算答案。采用另一篇题解的解法使用期望的定义与性质辅助考虑。那篇题解对我也很大启发帮助。
显然期望等于概率乘权值之和。定义
注意到这个
考虑构造这样的一个互不影响的部分,并使得意义和定义能够对应
思考到这里的原因是,我们只有保证第
于是对应完成,考虑计算
考虑采用组合定义。显然一共有
这样的话一共有
计算即可。注意特判
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MOD=1e9+7;
LL fac[100005],ifac[100005];
LL QuickPow(LL x,LL p)
{
LL ans=1,base=x;
while(p)
{
if(p&1) ans=(ans*base)%MOD;
base=(base*base)%MOD;
p>>=1;
}
return ans;
}
LL C(LL n,LL m){if(n<m) return 0;return fac[n]*ifac[m]%MOD*ifac[n-m]%MOD;}
int main(){
fac[0]=1;
for(LL i=1;i<=100000;++i) fac[i]=fac[i-1]*i%MOD;
ifac[100000]=QuickPow(fac[100000],MOD-2);
for(LL i=99999;~i;--i) ifac[i]=ifac[i+1]*(i+1)%MOD;
LL T;
scanf("%lld",&T);
while(T-->0)
{
LL n,k;
scanf("%lld %lld",&n,&k);
LL ans=1;
for(LL i=1;i<n;++i) (ans+=C(n-(i-1)*(k-1),i)*QuickPow(C(n,i),MOD-2))%=MOD;
printf("%lld\n",ans);
}
return 0;
}