CF1523E Crypto Lights

CF1523E Crypto Lights

CF1523E\(\mathbf{} \begin{Bmatrix} \frac{{\Large CF1523E} }{{\color{Red}\Large Solution} }\mathbf{} {No.30} \end{Bmatrix}\times{}\) NeeDna

题目描述

有 \(n\) 个台灯初始时都是暗的,每次等概率随机一个暗台灯将其点亮,若点亮后存在一个长度为 \(k\) 的连续段有大于一个台灯被点亮则立刻停止,求期望点亮多少台灯。答案对 \(10^9+7\) 取模。

题解

这道题是期望 dp,这个是简单就可以看出来的,那我们来构造期望的算法。

一般的,我们把期望拆成概率乘以贡献。定义 \(p_i\) 为点亮 \(i\) 颗灯结束操作的概率,所以我们可以得到这个式子:

\[E = \sum_{i=1}^{n} i\times p_i

\]

拆出来一点用也没有,为什么,我们能算出来的其实是到第 \(i\) 步也成功的概率,设它为 \(s_i\),但是这个和 \(p_i\) 差的距离有点远,我们看看 \(s_i\) 等于什么:其实就是在 \([i+1,n]\) 步失败的概率和。即令 \(s_i = \sum_{j=i}^n p_i\)。那么有:

\[E = \sum_{i=1}^n s_{i-1}

\]

这下就能算了,我们可以采用插板法,对于求\(s_{i-1}\),有 $ i-1 $ 盏亮着的灯,显然一共有 \(\dbinom{n}{i-1}\) 种选法。那么合法的情况呢,考虑一下限制,每个亮灯至少隔 \(k-1\) 个灭着的灯,而其中有 \(i-2\) 个间隔,所以我们发现每一种合法的答案其实有 \((k-1)\times (i-2)\) 个灭着的灯是固定的,剩下随便选的点就只剩 \(n-(k-1)\times(i-2)\) 个了,所以合法的答案共有 \(\dbinom{n-(k-1)\times(i-2)}{i-1}\),得到:

\[s_{i-1} = \dfrac{\dbinom{n-(k-1)\times(i-2)}{i-1}}{\dbinom{n}{i-1}}

\]

计算即可。注意特判 \(i=1\) 的时候 \(s_{i-1}\) 为 \(1\)。

code:

#include

#define int long long

using namespace std;

const int N=1e5+10,mod=1e9+7;

int T,n,k,ni[N],jie[N],ans;

int ksm(int x,int k){

int ans=1;

while(k>1){

if(k%2==1) ans=ans*x%mod;

x=x*x%mod;k/=2;

}return (ans*x)%mod;

}

int c(int n,int m){

if(n>m) return 0;

return (jie[m]*ni[n]%mod)*ni[m-n]%mod;

}

signed main(){

cin>>T;ni[0]=jie[1]=1;

for(int i=2;i

jie[i]=jie[i-1]*i%mod;

}ni[N-1]=ksm(jie[N-1],mod-2);

for(int i=N-2;i>=1;i--){ni[i]=ni[i+1]*(i+1)%mod;}

while(T--){

cin>>n>>k;ans=1;

for(int i=2;i<=n;i++){

ans=(ans+c(i-1,n-(k-1)*(i-2))*ksm(c(i-1,n),mod-2)%mod)%mod;

}cout<

}

return 0;

}

🎊 相关推荐

奖虫app官方版下载
365bet娱乐

奖虫app官方版下载

📅 10-26 👀 9972
辐射之城:中心
365bet体育网站

辐射之城:中心

📅 08-08 👀 7237
小苹果“拼”出千亿产业 六大苹果产区重构上行新通道