CF1392H ZS Shuffles Cards 题解
前置知识
解法
设 \(f_{i}\) 表示有 \(i\) 张数字牌没进入 \(S\),即 \(S\) 中只有 \(n-i\) 张数字牌时的期望轮数,有 \(f_{i}= \frac{i}{i+m}f_{i-1}+ \frac{m}{i+m}(f_{i}+1)\),解得 \(f_{i}=f_{i-1}+\frac{m}{i}\),边界为 \(f_{0}=1\)。
由于每一张数字牌在 joker
牌前被抽中的概率为 \(\frac{1}{m+1}\),故每一轮的期望牌数为 \(1+ \sum\limits_{i=1}^{n} \frac{1}{m+1}= 1+\frac{n}{m+1}\)。
最终,有 \(f_{n}(1+\frac{n}{m+1})\) 即为所求。
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define sort stable_sort
#define endl '\n'
const ll p=998244353;
ll f[2000010];
ll qpow(ll a,ll b,ll p)
{
ll ans=1;
while(b>0)
{
if(b&1)
{
ans=ans*a%p;
}
b>>=1;
a=a*a%p;
}
return ans;
}
int main()
{
ll n,m,i;
cin>>n>>m;
f[0]=1;
for(i=1;i<=n;i++)
{
f[i]=(f[i-1]+qpow(i,p-2,p)*m%p)%p;
}
cout<<f[n]*((qpow(m+1,p-2,p)*n%p+1)%p)%p<<endl;
return 0;
}
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18102308,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。