2023.2.13 日寄
2023.2.13日寄
一言
\(~~~~\) 这些围墙很有趣,刚开始你恨他,慢慢地你适应它,最后,你离不开他。——《肖申克的救赎》
模拟赛
晚间练习
嘉然今天吃什么
题意
\(~~~~\) 长为 \(n\) 初始关闭的灯,每次操作选择一个灯开启,当所有连续长 \(k\) 的段都至少有一个灯开启时停止操作,求期望开灯次数。
\(~~~~\) \(1\leq n,k\leq 10^7\).
题解
\(~~~~\) 考虑算概率:记 \(p_i\) 为放了 \(i\) 个灯,还不满足停止条件的概率,那么答案为 \(\sum_{i=0}^n p_i\)
\(~~~~\) 然后 \(p_i\) 可以用容斥算:\(p_i=\sum_{j} (-1)^{j-1}\frac{\binom{n-jk}{i}\binom{i+1}{j}}{\binom{n}{i}}\).其中 \(j\) 枚举的是有多少个空段不合法。
\(~~~~\) 开始推式子:
\[Ans=\sum_{i=1}^n \sum_{j} (-1)^{j-1}\frac{\binom{n-jk}{i}\binom{i+1}{j}}{\binom{n}{i}}\\=\sum_{i=1}^n \sum_{j}(-1)^{j-1}\frac{\binom{n-jk}{i}}{\binom{n}{i}}\times \binom{i+1}{j}\\= \sum_{j}(-1)^{j-1}\sum_{i=1}^n\frac{(n-jk)!}{i!(n-jk-i)!}\times \frac{i!(n-i)!}{n!}\times \binom{i+1}{j}
\]
\(~~~~\) 两个拆出来的阶乘上下同时乘一个 \((jk)!\):
\[Ans=\sum_{j}(-1)^{j-1}\sum_{i=1}^n\frac{(n-jk)!(jk)!}{n!}\sum_{i=1}^n \binom{n-i}{jk}\binom{i+1}{j}
\]
\(~~~~\) 后面 \(\sum_i\) 的部分组合意义分析等于 \(\binom{n+i+2}{jk+j+1}\) ,上下都加的 \(1\) 是钦定一个东西作为分界线。
代码
查看代码
#include <bits/stdc++.h>
#define PII pair<int,int>
#define mp(a,b) make_pair(a,b)
using namespace std;
template<typename T>void read(T &x)
{
T f=1;x=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
x*=f;
}
int Fac[10000005],Inv[10000005];
const int MOD=998244353;
inline int Add(int a,int b){a+=b;return a>=MOD?a-MOD:a;}
inline int Dec(int a,int b){a-=b;return a<0?a+MOD:a;}
inline int Mul(int a,int b){return 1ll*a*b%MOD;}
int qpow(int a,int b)
{
int ret=1;
while(b)
{
if(b&1) ret=Mul(ret,a);
b>>=1;a=Mul(a,a);
}
return ret;
}
inline int C(int n,int r){return r<=n?Mul(Fac[n],Mul(Inv[n-r],Inv[r])):0;}
int main() {
int n,k;read(n);read(k);
if(k==1) return printf("%d",n)&0;
Fac[0]=1;
for(int i=1;i<=10000000;i++) Fac[i]=Mul(Fac[i-1],i);
Inv[10000000]=qpow(Fac[10000000],MOD-2);
for(int i=10000000-1;i>=1;i--) Inv[i]=Mul(Inv[i+1],i+1);
int Ans=0;
for(int j=1;j<=n/k;j++)
Ans=Add(Ans,Mul(((j-1)%2==0)?1:MOD-1,Mul(Fac[n-j*k],Mul(Fac[j*k],C(n+2,j*k+j+1)))));
printf("%d",Mul(Ans,Inv[n]));
return 0;
}
/*
瑶草一何碧,春入武陵溪。溪上桃花无数,花上有黄鹂。我欲穿花寻路,直入白云深处,浩气展虹霓。只恐花深里,红露湿人衣。
坐玉石,欹玉枕。拂金徽。谪仙何处,无人伴我白螺杯。我为灵芝仙草,不为朱唇丹脸,长啸亦何为。醉舞下山去,明月逐人归。
*/