CF1278F Card【斯特林数】
CF1278F Card
有
张牌,其中一个是王牌,你有 次操作,每次进行洗牌并查看第一张牌,记第一张是王牌的次数是 ,求 的期望。
。
类似的普通幂,先枚举底数
一些常用技巧:提取公因数化简、交换求和符号、下降幂写成阶乘乘以组合数、组合数恒等变化,二项式反演。
至此,第二类斯特林数可以在
若用生成函数计算一行的斯特林数可以优化到
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
int read(){
char c=getchar();int h=0,tag=1;
while(!isdigit(c)) tag=(c=='-'?-1:1),c=getchar();
while(isdigit(c)) h=(h<<1)+(h<<3)+(c^48),c=getchar();
return h*tag;
}
void fil(){
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
}
const int N=5005,mod=998244353;
int brace[N][N];
int fac[N],inv[N];
int ksm(int a,int b) {
if(b==1) return a%mod;
int s=ksm(a,b/2);s=s*s%mod;
if(b%2==1) s=s*a%mod;
return s%mod;
}
int binom(int n,int m) {
if(m<0||n<m) return 0;
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int calc(int n,int m) {
int res=1;
for(int i=n;i>=n-m+1;i--) res=res*i%mod;
return res;
}
int underpow[N],ppow[N];
signed main(){
// fil();
int n=read(),m=read(),k=read();
brace[0][0]=1;
for(int i=1;i<=k;i++) {
for(int j=1;j<=i;j++) {
brace[i][j]=(j*brace[i-1][j]%mod+brace[i-1][j-1])%mod;
}
}
underpow[0]=n;
for(int i=1;i<=k;i++) underpow[i]=underpow[i-1]*(n-i)%mod;
inv[0]=1,fac[0]=1;
for(int i=1;i<=N-100;i++) fac[i]=fac[i-1]*i%mod,inv[i]=ksm(fac[i],mod-2)%mod;
int res=ksm(ksm(m,n)%mod,mod-2)%mod;
ppow[0]=ksm(m,n)%mod;
for(int i=1;i<=k;i++) ppow[i]=ppow[i-1]*ksm(m,mod-2)%mod;
int sum=0;
for(int j=0;j<=k;j++) {
sum+=brace[k][j]*calc(n,j)%mod*ppow[j]%mod;
sum%=mod;
}
// cout<<res<<" "<<sum<<endl;
cout<<(res*sum%mod)<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现