LuoguP2822 组合数问题(组合数,二维前缀和)
Posted l-memory
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LuoguP2822 组合数问题(组合数,二维前缀和)相关的知识,希望对你有一定的参考价值。
P2822 组合数问题
输入输出样例
说明
【样例1说明】
在所有可能的情况中,只有C_2^1 = 2C21?=2是2的倍数。
【子任务】
#include<bits/stdc++.h>
#define N 2001
#define ll long long
using namespace std;
ll n,m,t,k,ans,cnt;
ll C[N+5][N+5],sum[N+5][N+5],a[N+5][N+5];
inline ll read()
{
int x=0,f=1;char c=getchar();
while(c>‘9‘||c<‘0‘){if(c==‘-‘)f=-1;c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
return x*f;
}
void init()
{
for(int i=0;i<=N;i++) C[i][i]=C[i][0]=1;
for(int i=1;i<=N;i++) for(int j=1;j<i;j++)
{
C[i][j]=(C[i-1][j]+C[i-1][j-1])%k;
if(C[i][j]==0) a[i][j]++;
}
for(int i=1;i<=N;i++) for(int j=1;j<=N;j++)
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
int main()
{
t=read();k=read();
init();
while(t--)
{
n=read();m=read();
printf("%lld
",sum[n][m]);
}
return 0;
}
以上是关于LuoguP2822 组合数问题(组合数,二维前缀和)的主要内容,如果未能解决你的问题,请参考以下文章