查了好半天都没查出来结果变换了一下定义语句的顺序就从0-100!
//0分代码
#include<iostream>
using namespace std;
int c[2001][2001],ans[2001][2001];
int t,k,n,m;
int main()
{
cin>>t>>k;
c[0][0]=1;
c[1][0]=1;c[1][1]=1;
for(int i=2;i<=2000;i++)
{
c[i][0]=1;
for(int j=1;j<=i;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
ans[i][j]=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];
if(!c[i][j]) ans[i][j]++;
}
ans[i][i+1]=ans[i][i];
}
while(t--)
{
cin>>n>>m;
if(m>n) cout<<ans[n][n]<<endl;
else cout<<ans[n][m]<<endl;
}
return 0;
}
100分代码
#include<iostream>
using namespace std;
//改变了一下顺序就不行了,什么鬼?
int t,k,n,m; //就在这里!
int c[2001][2001],ans[2001][2001]; //就在这里!
int main()
{
cin>>t>>k;
c[0][0]=1;
c[1][0]=1;c[1][1]=1;
for(int i=2;i<=2000;i++)
{
c[i][0]=1;
for(int j=1;j<=i;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%k;
ans[i][j]=ans[i-1][j]+ans[i][j-1]-ans[i-1][j-1];
if(!c[i][j]) ans[i][j]++;
}
ans[i][i+1]=ans[i][i];
}
while(t--)
{
cin>>n>>m;
if(m>n) cout<<ans[n][n]<<endl;
else cout<<ans[n][m]<<endl;
}
return 0;
}