WA代码:\
#include<iostream>
using namespace std;
typedef long long ll;
const int MAXN = 2010;
ll ls[MAXN][MAXN];
ll mp[MAXN][MAXN];
int t;
ll k;
void init(){
ls[1][1] = 1;
for(int i = 2;i<=2005;i++){
for(int j = 1;j<=i;j++){
ls[i][j] = (ls[i-1][j-1]+ls[i-1][j]);
if(ls[i][j]%k == 0) mp[i][j]++;
}
}
}
int m,n;
void ak(){
for(int i = 1;i<=2005;i++){
for(int j = 1;j<=2005;j++){
mp[i][j] += mp[i-1][j];
}
}
for(int i = 1;i<=2005;i++){
for(int j = 1;j<=2005;j++){
mp[i][j] += mp[i][j-1];
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
// freopen("P2822.in","r",stdin);
// freopen("P2822.out","w",stdout);
cin>>t>>k;
init();
ak();
// for(int i = 1;i<=8;i++){
// for(int j = 1;j<=i;j++){
// cout<<mp[i][j]<<" ";
// }
// cout<<"\n";
// }
while(t--){
cin>>n>>m;
cout<<mp[n+1][m+1]<<"\n";
}
return 0;
}
AC代码:\
#include<iostream>
using namespace std;
typedef long long ll;
const int MAXN = 2010;
ll ls[MAXN][MAXN];
ll mp[MAXN][MAXN];
int t;
ll k;
void init(){
ls[1][1] = 1;
for(int i = 2;i<=2005;i++){
for(int j = 1;j<=i;j++){
ls[i][j] = (ls[i-1][j-1]+ls[i-1][j])%k;
if(ls[i][j] == 0) mp[i][j]++;
}
}
}
int m,n;
void ak(){
for(int i = 1;i<=2005;i++){
for(int j = 1;j<=2005;j++){
mp[i][j] += mp[i-1][j];
}
}
for(int i = 1;i<=2005;i++){
for(int j = 1;j<=2005;j++){
mp[i][j] += mp[i][j-1];
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
// freopen("P2822.in","r",stdin);
// freopen("P2822.out","w",stdout);
cin>>t>>k;
init();
ak();
// for(int i = 1;i<=8;i++){
// for(int j = 1;j<=i;j++){
// cout<<mp[i][j]<<" ";
// }
// cout<<"\n";
// }
while(t--){
cin>>n>>m;
cout<<mp[n+1][m+1]<<"\n";
}
return 0;
}
rt,是组合数爆longlong了吗