社区讨论
来自非萌新的求助
P2822[NOIP 2016 提高组] 组合数问题参与者 6已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mi6yz41f
- 此快照首次捕获于
- 2025/11/20 13:07 4 个月前
- 此快照最后确认于
- 2025/11/20 13:07 4 个月前
蜜汁50分
代码如下
CPP
代码如下#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
struct node{ll n,m;}q[1010];
ll t,k,ans,maxn=-1,c[2020][2020],f[2020][2020];
inline ll read(){
char ch=getchar();ll j=0,k=1;
while(ch<'0'||ch>'9'){if(ch=='-')k=-1;ch=getchar();}
while(ch>='0'&&ch<='9')j=j*10+ch-'0',ch=getchar();
return j*k;
}
inline void write(ll x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
int main(){
t=read(),k=read();
for(ll i=1;i<=t;i++){
q[i].n=read(),q[i].m=read();
maxn=max(maxn,q[i].n);
}
for(ll i=0;i<=maxn;i++)c[i][0]=c[i][i]=1;
for(ll i=2;i<=maxn;i++)
for(ll j=1;j<=i;j++)c[i][j]=(c[i-1][j-1]+c[i-1][j])%k;
for(ll i=2;i<=maxn;i++){
for(ll j=1;j<=i;j++){
f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
if(!c[i][j])f[i][j]++;
}
f[i][i+1]=f[i][i];
}
for(ll i=1;i<=t;i++)
write(f[q[i].n][min(q[i].n,q[i].m)]),putchar('\n');
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...