1 solutions
-
0
预先计算出所有,然后如果,那么我们令,否则我们令,那么所求的所有的解即为
#include<bits/stdc++.h> using namespace std; const int N=2010; int c[N][N],s[N][N]; int main() { int t,k,n,m; cin>>t>>k; for(int i=0;i<N;i++) { for(int j=0;j<=i;j++) { if(!j) c[i][j]=1%k; else c[i][j]=(c[i-1][j-1]+c[i-1][j])%k; if(!c[i][j]) s[i][j]=1;//表示当前组合数是k的倍数 } } for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(i) s[i][j]+=s[i-1][j]; //左边 if(j) s[i][j]+=s[i][j-1]; //下边 if(i&&j) s[i][j]-=s[i-1][j-1];//左下角 } } while(t--) { int n,m; cin>>n>>m; cout<<s[n][m]<<endl; } return 0; }
- 1
Information
- ID
- 1121
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By