1.容斥
1.1 隔板升级
void init(){
fac[0]=1;
for(int i=1;i<=IX;i++) fac[i]=(fac[i-1]*i)%mod;
inv[IX]=qm(fac[IX],mod-2);
for(int i=IX-1;i>=0;i--) inv[i]=(inv[i+1]*(i+1ll))%mod;
}
int fuckCCf(int a,int b){
if(a<b || a<0 || b<0)return 0;
return (fac[a]*(inv[a-b]*inv[b]%mod)%mod);
}
signed main(){
cin.tie(0);cout.tie(0);init();
cin>>T;
while(T--){
cin>>n>>m>>k;
int res=0;k+=(m-1ll);
for(int i=0;i<=m;i++){
int tk=k-n*i;
int tmp=(C(m,i)*C(tk,m-1))%mod;
if(i&1) res+=tmp;
else res=(((res-tmp)%mod)+mod)%mod;
res%=mod;
}
cout<<(res?mod-res:res)<<'\n';
}
return 0;
}
1.2 宝石
奇加偶减,太酷
int res=0;
for(int i=0;i<=m;i++){
int tmp=((C(m,i)*qm((qm(2,m-i)-1),n))%mod)*qm(-1ll,i);
res=(((res+tmp)%mod)+mod)%mod;
}
cout<<res;
1.3 硬币购买
P1450
1.4 Frogs
?
cin>>n>>m;p.clear();res=0;
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]=__gcd(a[i],m);
}
for(int i=1;i<=sqrt(m);i++)
if(m%i==0){
p.push_back(i);
if(i*i!=m) p.push_back(m/i);
}
sort(p.begin(),p.end());
for(int i=1;i<=n;i++)
for(int j=0;j<p.size();j++)
if(p[j]%a[i]==0) num[j]=1;
for(int i=0;i<p.size();i++){
res+=num[i]*cal(p[i],(m-1)/p[i]);
for(int j=i+1;j<p.size();j++)
if(p[j]%p[i]==0) num[j]-=num[i];
}
cout<<"Case #"<<(++TT)<<": "<<res<<"\n";
2.莫比乌斯反演
2.0 会不了一点
下午洛谷PJ月赛100+100+54+40=294