| 比赛 |
寒假集训5 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
на меня |
最终得分 |
100 |
| 用户昵称 |
梦那边的美好ME |
运行时间 |
3.807 s |
| 代码语言 |
C++ |
内存使用 |
134.44 MiB |
| 提交时间 |
2026-03-01 12:34:08 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int num=2010;
ll n,a[210000],b[210000],fac[110000],inv[110000],f[4200][4200];
ll ans,mod;
ll mpow(ll aa,ll bb){
ll res=1;
while (bb){
if (bb&1) res=res*aa%mod;
aa=aa*aa%mod;
bb>>=1;
}
return res;
}
ll C(ll aa,ll bb){
if (aa<0||bb<0||aa<bb) return 0;
return fac[aa]*inv[bb]%mod*inv[aa-bb]%mod;
}
int main(){
freopen("BBQ.in","r",stdin);
freopen("BBQ.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>mod;
fac[0]=1;
inv[0]=mpow(fac[0],mod-2)%mod;
for (ll i=1;i<=10000;i++){
fac[i]=(fac[i-1]*i)%mod;
inv[i]=mpow(fac[i],mod-2)%mod;
}
for (ll i=1;i<=n;i++){
cin>>a[i]>>b[i];
f[num-a[i]][num-b[i]]++;
}
for (ll i=1;i<=num*2;i++){
for (ll j=1;j<=num*2;j++){
f[i][j]=(f[i][j]+f[i-1][j]+f[i][j-1])%mod;
}
}
for (ll i=1;i<=n;i++){
ans=(ans+f[num+a[i]][num+b[i]])%mod;
ans=(ans-C(2*a[i]+2*b[i],2*a[i]))%mod;
ans=(ans+mod)%mod;
}
ans=(ans*mpow(2,mod-2))%mod;
cout<<ans<<'\n';
return 0;
}