记录编号 607461 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 2559.[NOIP 2016]组合数问题 最终得分 100
用户昵称 Gravatarhsl_beat 是否通过 通过
代码语言 C++ 运行时间 1.322 s
提交时间 2025-10-16 19:39:47 内存使用 47.92 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define int long long 
using namespace std;
int c[2010][2010], ans[2010][2010];
signed main()
{
    freopen("problem.in", "r", stdin);
    freopen("problem.out", "w", stdout);
    int T, k;
    cin >> T >> k; 
    for (int i = 0; i <= 2000; i++) {
        c[i][0] = c[i][i] = 1;
        for (int j = 1; j <= i; j++) {
            c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % k;
        }
    }
    for (int i = 0; i <= 2000; i++) {
        int cnt = 0;
        for (int j = 1; j <= i; j++)  {
            cnt += (c[i][j] == 0);
            if (i == j) {
                ans[i][j] = ans[i - 1][j - 1] + cnt;
            } else {
                ans[i][j] = ans[i - 1][j] + cnt;
            }
        }
    }
    while (T--) {
        int n, m;
        cin >> n >> m;
        m = min(n, m);
        cout << ans[n][m] << '\n';
    }
    return 0;
}