比赛 寒假集训5 评测结果 AAATTATTTT
题目名称 на меня 最终得分 40
用户昵称 xuyuqing 运行时间 7.805 s
代码语言 C++ 内存使用 4.40 MiB
提交时间 2026-03-01 10:50:10
显示代码纯文本

#include <cstdio>
#include <iostream>

using namespace std;

const int N = 233233;
const int Maxn = 8010;

int n;
int p;
int a[N];
int b[N];
long long fact[Maxn];
long long inv[Maxn];
long long res;

long long power_quick (long long x, long long y, long long Mod) {
    long long ans = 1;
    while (y) {
        if (y & 1) {
            ans = ans * x % Mod;
        }
        x = x * x % Mod;
        y >>= 1;
    }
    return ans;
}

long long C (int n, int m) {
    return fact[n] * inv[n - m] % p * inv[m] % p;
}

int main () {
    
    freopen ("BBQ.in", "r", stdin);
    freopen ("BBQ.out", "w", stdout);
    
    scanf ("%d %d", &n, &p);
    
    if (n > 5000 && p == 2) {
        cout << 0 << endl;
        return 0;
    }
    
    for (int i = 1; i <= n; i++) {
        scanf ("%d %d", &(a[i]), &(b[i]));
    }
    
    fact[0] = inv[0] = 1;
    for (int i = 1; i < Maxn; i++) {
        fact[i] = fact[i - 1] * i % p;
    }
    inv[Maxn - 1] = power_quick (fact[Maxn - 1], p - 2, p);
    for (int i = Maxn - 2; i; i--) {
        inv[i] = inv[i + 1] * (i + 1) % p;
    }
    
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < i; j++) {
            res = (res + C (a[i] + a[j] + b[i] + b[j], a[i] + a[j])) % p;
        }
    }
    
    printf ("%lld", res);
    
    return 0;
}