社区讨论

来自非萌新的求助

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 条回复,欢迎继续交流。

正在加载回复...