LuoguP2822 组合数问题(组合数,二维前缀和)

Posted l-memory

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LuoguP2822 组合数问题(组合数,二维前缀和)相关的知识,希望对你有一定的参考价值。

P2822 组合数问题

 

技术分享图片

 

输入输出样例

输入样例#1: 复制
1 2
3 3
输出样例#1: 复制
1
输入样例#2: 复制
2 5
4 5
6 7
输出样例#2: 复制
0
7

说明

【样例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 组合数问题(组合数,二维前缀和)的主要内容,如果未能解决你的问题,请参考以下文章

luoguP2822组合数问题

做题记录:P2822 组合数问题

Luogu P2822 组合数问题(前缀和)

[题解](组合数/矩阵的前缀和)luogu_P2822组合数问题

基础数学问题 P2822 组合数问题前缀和

基础数学问题 P2822 组合数问题前缀和