[ARC012D] Don't worry. Be Together
_fairytale_ · · 题解
首先每个人独立,对于每个人我们求的是这种形式的式子:
转化成,从
显然前
最后走的
对组合数的处理,可以先处理出每个数在答案中的指数,然后计算每个质数在答案中的指数。
int main() {
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>T>>mod;
auto mulfac=[&](int x,int op)->void{
c[1]+=op;
c[x+1]-=op;
};
auto mulC=[&](int n,int m)->void{
if(n<0||m<0||n<m){
cerr<<"invalid\n";
cout<<"0\n";
exit(0);
}
mulfac(n,1),mulfac(m,-1),mulfac(n-m,-1);
};
for(int i=1,a,b;i<=n;++i){
cin>>a>>b;
a=abs(a),b=abs(b);
if(a<b)swap(a,b);
if((a-b+T)%2){
cout<<"0\n";
return 0;
}
int x=(a-b+T)/2;
mulC(T,x),mulC(T,x-a);
}
rep(i,2,1000000){
c[i]+=c[i-1];
int x=i;
for(int j=2;j*j<=x;++j){
if(x%j==0){
while(x%j==0)x/=j,a[j]+=c[i];
}
}
if(x!=1)a[x]+=c[i];
}
int ans=1;
rep(i,1,1000000)ans=1ll*ans*qp(i,a[i])%mod;
cout<<ans<<'\n';
return 0;
}