首页 > 其他分享 >CF1278F Cards(斯特林数+二项式定理)

CF1278F Cards(斯特林数+二项式定理)

时间:2024-05-21 22:08:47浏览次数:26  
标签:include CF1278F dbinom cdot sum Cards mod 二项式 define

题意简述

有 \(m\) 张牌,其中有一张是王牌。你现在可以洗 \(n\) 次牌(每种牌堆序列等概率出现),然后查看牌堆顶的第一张牌。设 \(x\) 为 \(n\) 次洗牌中第一张牌是王牌的次数,则得分为 \(x^k\)。

求得分的期望值对 \(998244353\) 取模的值。

\(1\le n,m<998244353,k\le 5000\)

分析

将答案形式化表述:

\[\sum_{i=0}^n \dbinom{n}{i}\dfrac{(m-1)^i\cdot [(m-1)\cdot (m-1)!]^{n-i}}{m!^n}\cdot i^k \]

化简:

\[=\sum_{i=0}^n \dbinom{n}{i}(\frac{1}{m})^i\cdot(\frac{m-1}{m})^{n-i} \cdot i^k \]

设 \(a=\frac{1}{m},b=\frac{m-1}{m}\),则原式为

\[=\sum_{i=0}^n \dbinom{n}{i}a^i\cdot b^{n-i} \cdot i^k \]

用第二类斯特林数拆掉这个幂次:

\[=\sum_{i=0}^n \dbinom{n}{i}a^i\cdot b^{n-i} \sum_{j=1}^k S(k,j)\cdot i^{\underline{j}} \]

其中 \(S(i,j)\) 表示第二类斯特林数。

交换求和顺序:

\[\sum_{j=1}^k S(k,j)\sum_{i=j}^n \dbinom{n}{i}a^i\cdot b^{n-i} \cdot \dbinom{i}{j}\cdot j! \]

注意只有 \(i\ge j\) 的时候 \(i^{\underline{j}}\) 才有意义,式子才成立。

\[=\sum_{j=1}^k S(k,j)\cdot j!\sum_{i=j}^n \dbinom{n}{i}\dbinom{i}{j} a^i\cdot b^{n-i} \]

\[=\sum_{j=1}^k S(k,j)\cdot j!\sum_{i=j}^n \dbinom{n}{j}\dbinom{n-j}{i-j} a^i\cdot b^{n-i} \]

考虑把后面那坨式子转化为二项式定理的形式:

\[=\sum_{j=1}^k S(k,j)\cdot j!\dbinom{n}{j}\sum_{i=0}^{n-j} \dbinom{n-j}{i} a^{i+j}\cdot b^{n-i-j} \]

根据二项式定理:

\[\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^{i+j}b^{n-i-j}=\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^ia^jb^{n-i-j} \]

\[=a^j\cdot\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^{i}b^{n-i-j}=a^j\cdot (a+b)^{n-j}=1 \]

所以原式化为

\[\sum_{j=1}^kS(k,j)\cdot j!\cdot \dbinom{n}{j}\cdot a^j \]

由于 \(k\le 5000\),第二类斯特林数可以暴力递推算。

由于 \(n,m\) 过大,无法计算阶乘和组合数。但是两者可以约分成 \(\prod_{i=n-j+1}^n i\),这个东西就可以暴力 \(O(k)\) 算了(递推也可以)。时间复杂度 \(O(k^2)\)。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<unordered_map>
#include<vector>
#include<queue>
#include<bitset>
#include<set>
#include<ctime>
#include<random>
#include<cassert>
#define x1 xx1
#define y1 yy1
#define IOS ios::sync_with_stdio(false)
#define ITIE cin.tie(0);
#define OTIE cout.tie(0);
#define PY puts("Yes")
#define PN puts("No")
#define PW puts("-1")
#define P0 puts("0")
#define P__ puts("")
#define PU puts("--------------------")
#define popc __builtin_popcount
#define mp make_pair
#define fi first
#define se second
#define gc getchar
#define pc putchar
#define pb emplace_back
#define rep(a,b,c) for(int a=(b);a<=(c);++a)
#define per(a,b,c) for(int a=(b);a>=(c);--a)
#define reprange(a,b,c,d) for(int a=(b);a<=(c);a+=(d))
#define perrange(a,b,c,d) for(int a=(b);a>=(c);a-=(d))
#define graph(i,j,k,l) for(int i=k[j];i;i=l[i].nxt)
#define lowbit(x) (x&-x)
#define lson(x) (x<<1)
#define rson(x) (x<<1|1)
#define mem(x,y) memset(x,y,sizeof x)
//#define double long double
#define int long long
//#define int __int128
using namespace std;
typedef long long i64;
using pii=pair<int,int>;
bool greating(int x,int y){return x>y;}
bool greatingll(long long x,long long y){return x>y;}
inline int rd(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
}
inline void write(int x,char ch='\0'){
	if(x<0){x=-x;putchar('-');}
	int y=0;char z[40];
	while(x||!y){z[y++]=x%10+48;x/=10;}
	while(y--)putchar(z[y]);if(ch!='\0')putchar(ch);
}
bool Mbg;
const int maxn=2e5+5,maxm=5e3+5,inf=0x3f3f3f3f,mod=998244353;
const long long llinf=0x3f3f3f3f3f3f3f3f;
int n,m,k;
int S[maxm][maxm];
int ksm(int x,int y){
	int res=1;
	for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;
	return res;
}
void init(){
	S[0][0]=1;
	rep(i,1,k)rep(j,1,i)S[i][j]=(S[i-1][j-1]+j*S[i-1][j]%mod)%mod;
}
void solve_the_problem(){
	n=rd(),m=rd(),k=rd(),init();
	int ans=0,p=ksm(m,mod-2),c=1,mp=1;
	rep(i,0,k){
		ans=(ans+S[k][i]*c%mod*mp)%mod;
		c=c*(n-i)%mod,mp=mp*p%mod;
	}
	write(ans);
}
bool Med;
signed main(){
//	freopen(".in","r",stdin);freopen(".out","w",stdout);
//	fprintf(stderr,"%.3lfMB\n",(&Mbg-&Med)/1048576.0);
	int _=1;while(_--)solve_the_problem();
}

标签:include,CF1278F,dbinom,cdot,sum,Cards,mod,二项式,define
From: https://www.cnblogs.com/dcytrl/p/18202965

相关文章

  • [数论] 二项式反演
    菜就多练,输不起就别玩,不会就是不会。二项式推论\(1.\)\(\tbinom{n}{m}=\tbinom{n}{n-m}\)\(2.\)\(\tbinom{n}{m}=\frac{n}{m}\tbinom{n-1}{m-1}\)\(3.\)\(\sum\limits_{i=0}^nC_n^i=2^n\)证明:拆\((1+1)^n\)\(4.\)\(\sum\limits_{i=0}^n(-1)^iC_n^i=0\)特殊的,......
  • 二项式反演
    算法核心二项式反演与莫比乌斯反演类似,都可以用于在给定的条件式实现两个函数之间的相互推算。二项式反演适用于,其核心反演式子有二:\[f(n)=\sum_{i=0}^n(-1)^iC_n^ig(i)\iffg(n)=\sum_{i=0}^n(-1)^iC_n^if(i)\]\[f(k)=\sum_{i=k}^nC_i^kg(i)\iffg(k)......
  • 二项式系数
    二项式系数更完整的思考过程以及代数推理过程都可以看数学书,所以我尽量给每个式子都赋予组合意义。因为在有足够强的代数推理能力之前,没有组合意义往往是困难的。恒等式赋予组合意义往往都是左边右边分开找意义。常见公式:\[\begin{aligned}\binom{n}{k}&=\binom{n}{n-k}\en......
  • Two Sided Cards 题解
    前言五一网课的例题,但是网上没有详细的题解(真的连题解都找不到啊),所以来写一篇,就当攒RP了。题目可以在这里提交。原题是TopCoder-10947,但是有了账号也交不了?题目简述有\(n\)张卡片,正面和反面分别组成了\(1\simn\)的排列。现在你需要将这\(n\)张卡片排成一排。卡片......
  • CF1392H ZS Shuffles Cards 题解
    题目传送门前置知识概率DP解法设\(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\)。由于每一张数字牌在joke......
  • 初三组合恒等式和二项式定理练习 题解
    A.多项式推柿子:\[\begin{aligned}&\sum\limits_{k=0}^{n}b_{k}(x-t)^{k}\\=&\sum\limits_{k=0}^{n}b_{k}\sum\limits_{i=0}^{k}\binom{k}{i}x^{i}(-t)^{k-i}\\=&\sum\limits_{0\leqslanti\leqslantk\leqslantn}\binom{k}{i}b_{......
  • ARC111B Reversible Cards 题解 (套路题)
    考虑将\(a_i,b_i\)之间连边,发现题目可以被转化为给定一个图,要求对于每条边将其一个顶点染色,问最多能将多少个点染色。于是我们对于每个连通块分开来考虑。对于一个连通块,注意到我们不能将每个顶点染色当且仅当这个连通块是树,且此时可以染色的定点数量为连通块大小减一,如下:如......
  • 对二项式定理求导
    \[\begin{aligned}(x+1)^n&=\sum_{i=0}^n\binomnix^i\\(x+1)^n&=\sum_{i=0}^n\binomnix^i\\((x+1)^n)'&=(\sum_{i=0}^n\binomnix^i)'\\n(x+1)^{n-1}&=\sum_{i=0}^n\binomniix^{i-1}\\2^{n-1}n&=\sum_{i=0}^ni\bin......
  • <学习笔记> 二项式反演
    二项式反演证明我们设\(g(x)\)为任意\(x\)个集合的交集的大小,\(f(x)\)表示任意\(x\)个集合补集的交集大小。首先有(组合数学6.2)\[|\overline{S_1}\cap\overline{S_2}\cap...\cap\overline{S_{n-1}}\cap\overline{S_n}|=|U|-|{S_1}|-|{S_2}|-...+(-1)^n\times|{S......
  • 二项式定理
    二项式定理观察下列各式及其展开式\[(x+y)^2=x^2+2xy+y^2\]\[(x+y)^3=x^3+3x^2y+3yx^2+y^3\]\[(x+y)^4=x^4+4x^3y+6x^2y^2+4xy^3+y^4\]\[\cdots\cdots\]杨辉三角\[1\]\[1\quad1\]\[1\quad2\quad1\]\[1\quad3\quad3\quad1\]\[\cdots\quad......