RT,代码如下:
#include <iostream>
#include <cstdio>
using namespace std ;
const int maxn = 2e3+5 ;
long long t , k ;
long long c[maxn][maxn] ;
long long vis[maxn][maxn] ;
void init() {
c[0][0] = 1 ;
for ( long long i = 1 ; i <= 2000 ; i ++ ) {
for ( long long j = 0 ; j <= i ; j ++ ) {
if(j == 0) {
c[i][j] = 1 ;
}
else {
c[i][j] = c[i-1][j]+c[i-1][j-1] ;
if(c[i][j]%k==0) vis[i][j] = 1 ;
}
}
}
for ( long long i = 1 ; i <= 2000 ; i ++ ) {
for ( long long j = 0 ; j <= 2000 ; j ++ ) {
if(j==0) {
vis[i][j] += vis[i-1][j] ;
}
else {
vis[i][j] += vis[i-1][j]+vis[i][j-1]-vis[i-1][j-1] ;
}
}
}
}
int main ( ) {
cin >> t >> k ;
init() ;
while(t--) {
long long n , m ;
cin >> n >> m ;
cout << vis[n][min(m,n)] << endl ;
}
// for ( int i = 0 ; i <= 7 ; i ++ ) {
// for ( int j = 0 ; j <= 7 ; j ++ ) {
// cout << vis[i][j] << " " ;
// }
// cout << endl ;
// }
//
// for ( int i = 0 ; i <= 7 ; i ++ ) {
// for ( int j = 0 ; j <= i ; j ++ ) {
// cout << c[i][j] << " " ;
// }
// cout << endl ;
// }
return 0 ;
}