本来只是打一下P2822,结果发现了及其离谱的东西,代码如下
#include<bits/stdc++.h>
using namespace std;
long long c[2001][2001],n,m,s[2001][2001];
long long T,k;
void prepare(){
c[1][1]=1;
for(int i=0;i<=2000;i++) c[i][0]=1;
for(int i=2;i<=2000;i++){
for(int j=1;j<=i;j++){
c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
}
}
for(int i=2;i<=2000;i++){
for(int j=1;j<=i;j++){
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
if(c[i][j]==0) s[i][j]+=1;
}
s[i][i+1]=s[i][i];
}
}
int main(){
scanf("%lld%lld",&T,&k);
prepare();
while(T--){
scanf("%lld%lld",&n,&m);
if(m>n)printf("%lld\n",s[n][n]);
else printf("%lld\n",s[n][m]);
cout<<T<<endl;
}
return 0;
}