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\n",sum[n][m]); } return 0; }
原文地址:https://www.cnblogs.com/L-Memory/p/9918229.html
时间: 2024-11-15 02:05:30