比赛 |
SBOI摆烂比赛① |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
组合数问题 |
最终得分 |
100 |
用户昵称 |
yrtiop |
运行时间 |
1.245 s |
代码语言 |
C++ |
内存使用 |
33.09 MiB |
提交时间 |
2022-06-01 20:05:24 |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 2e3 + 5;
int f[maxn][maxn],s[maxn][maxn];
int T,k,n = 2e3,m = 2e3;
void init() {
f[1][0] = f[1][1] = 1;
for(int i = 2;i <= n;++ i) {
f[i][0] = 1;
s[i][0] = s[i - 1][0] + (f[i][0] == 0);
for(int j = 1;j <= i;++ j) {
(f[i][j] = f[i - 1][j - 1] + f[i - 1][j]) %= k;
}
for(int j = 1;j <= n;++ j)s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + (j <= i&&!f[i][j]);
}
return ;
}
void work() {
scanf("%d%d",&n,&m);
printf("%d\n",s[n][min(n , m)]);
return ;
}
int main() {
freopen("problem.in","r",stdin);
freopen("problem.out","w",stdout);
scanf("%d%d",&T,&k);
init();
for(;T --;)work();
return 0;
}