HDU6397 Character Encoding
HDU6397
懒得搬题了
思路:
简单容斥+插板法
\[{m+k-1\choose m-1}+\sum_{i=1}^m(-1)^i{m+k-ni-1\choose m-1}{m\choose i}
\]
\(\mathfrak{Talk\ is\ cheap,show\ you\ the\ code.}\)
#include<map>
#include<cmath>
#include<stack>
#include<deque>
#include<queue>
#include<cstdio>
#include<vector>
#include<climits>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define ll long long
# define read read1<ll>()
Type T read1(){
T t=0;char k;
bool v=0;
do (k=getchar())=='-'&&(v=1);while('0'>k||k>'9');
while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
return v?-t:t;
}
ll qkpow(ll n,ll x,ll mo){
if(!x)return 1;
ll t=qkpow(n,x>>1,mo);
t=t*t%mo;
if(x&1)t=t*n%mo;
return t;
}
# define mod 998244353ll
# define N 200000
ll fac[N|3],inv[N|3];
void init(){
fac[0]=1;
for(int i=1;i<=N;++i)
fac[i]=fac[i-1]*i%mod;
inv[N]=qkpow(fac[N],mod-2,mod);
for(int i=N;i;--i)
inv[i-1]=inv[i]*i%mod;
}
ll Ch(ll m,ll n){
if(m<n)return 0;
return fac[m]*inv[m-n]%mod*inv[n]%mod;
}
ll invi(ll x){return qkpow(x,mod-2,mod);}
int main(){
init();
for(int T=read;T--;){
int n=read,m=read,k=read;
ll ans=Ch(m+k-1,m-1);
for(int i=1;i<=m;++i){
ans=(ans+(i&1?-1:1)*Ch(m,i)*Ch(k-1ll*n*i+m-1,m-1))%mod;
}
cout<<(ans+mod)%mod<<endl;
}
return 0;
}
因果乃旋转纺车,光彩之多面明镜
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存
浮世苍茫,不过瞬逝幻梦
善恶爱诳,皆有定数
于命运之轮中
吞噬于黄泉之冥暗
呜呼,吾乃梦之戍人
幻恋之观者
唯于万华镜中,永世长存

浙公网安备 33010602011771号