rt,本地是跑的过去的,把数组开到3000然后代码跑到2000也试了,但就是永远都在RE
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2005;
int a[maxn][maxn], pre[maxn][maxn];
void solve() {
int t, k;
cin >> t >> k;
a[0][1] = 1;
a[1][1] = 1;
a[1][2] = 1;
for (int i = 2; i < maxn; ++i) {
for (int j = 1; j <= i + 1; ++j) {
a[i][j] = (a[i - 1][j] + a[i - 1][j - 1]) % k;
}
}
for (int i = 0; i < maxn; ++i)
for (int j = 1; j <= i + 1; ++j) {
if (i == j - 1) {
pre[i - 1][j] = pre[i - 1][j - 1];
}
if (a[i][j] == 0) {
pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + 1;
} else {
pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1];
}
}
for (int i = 1; i <= t; ++i) {
int x, y;
cin >> x >> y;
cout << pre[x][min(x + 1, y + 1)] << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
return 0;
}