[洛谷 2822]组合数问题---二项式定理+前缀和
来源:互联网 发布:网络大神作家经典作品 编辑:程序博客网 时间:2024/05/18 03:59
题目描述
组合数CnmC_n^mCnm表示的是从n个物品中选出m个物品的方案数。举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法。根据组合数的定 义,我们可以给出计算组合数的一般公式:
Cnm=n!m!(n−m)!C_n^m=\frac{n!}{m!(n - m)!}Cnm=m!(n−m)!n!
其中n! = 1 × 2 × · · · × n
小葱想知道如果给定n,m和k,对于所有的0 <= i <= n,0 <= j <= min(i,m)有多少对 (i,j)满足CijC_i^jCij是k的倍数。
输入输出格式
输入格式:
第一行有两个整数t,k,其中t代表该测试点总共有多少组测试数据,k的意义见 【问题描述】。
接下来t行每行两个整数n,m,其中n,m的意义见【问题描述】。
输出格式:
t行,每行一个整数代表答案。
输入输出样例
输入样例#1:
1 2
3 3
输出样例#1:
1
输入样例#2:
2 5
4 5
6 7
输出样例#2:
0
7
分析
作为去年没做出来的题,不想多说什么...
直接杨辉三角即可,再加入一点优化:
1.直接%k,当f[i][j]为0时,ans++
2.利用前缀和,优化答案统计
代码
#include <cstdio>#include <cstdlib>#define open(s) freopen(s".in","r",stdin); freopen(s".out","w",stdout);#define close fclose(stdin); fclose(stdout); using namespace std;int mo;int f[2005][2005];int s[2005][2005];inline int read(){ int k=1; int sum=0; char c=getchar(); for(;'0'>c || c>'9' ;c=getchar()) if(c=='-') k=-1; for(;'0'<=c && c<='9';c=getchar()) sum=sum*10+c-'0'; return sum*k;}inline void write(int x){ if(x<0) { putchar('-'); x*=-1; } if(x>9) write(x/10); putchar(x%10+'0');}inline void get_f(){ for(int i=0;i<=2000;++i) for(int j=0;j<=i;++j) { if(i==j || !j) f[i][j]=1; else f[i][j]=f[i-1][j-1]+f[i-1][j]; if(f[i][j]>=mo) f[i][j]-=mo; if(!f[i][j]) s[i][j]=1; s[i][j]+=(j?s[i][j-1]:0); }}int main(){ open("2822"); int T=read(); mo=read(); get_f(); for(int x,y,ans;T;--T) { x=read(); y=read(); ans=0; for(int i=0;i<=x;++i)//其实前缀和还可以再优化变为O(1) ans+=s[i][i<y?i:y]; write(ans); putchar('\n'); } close; return 0;}
阅读全文
0 0
- [洛谷 2822]组合数问题---二项式定理+前缀和
- noip2016组合数问题 组合+前缀和
- tyvj 4877 组合数 唯一分解定理+前缀和优化
- noip2016 Day2 T2-组合数问题-组合数学-前缀和
- Codevs 3322 时空跳跃者的困境(组合数 二项式定理)
- [洛谷 1313]计算系数---二项式定理+快速幂+逆元(费马小定理)
- LuoguP2822[NOIP2016] 组合数问题 解题报告【组合数取模+矩阵前缀和】
- 组合数的各种性质和定理
- 二项式定理
- 二项式定理
- 二项式定理
- 洛谷2822 组合数问题
- 杨辉三角和二项式定理
- 组合数/Lucas定理
- 高中数学之排列、组合定义及二项式定理
- 组合数打表+二维前缀数组优化——组合数问题
- NOIP2016组合数问题(洛谷2822)
- 组合数模板+ 卢卡斯定理
- Spring4中的@Value的使用(学习笔记)
- Codeforces 1A. Theatre Square
- softmax层的实现
- 课后习题page100.pp.3.2
- 【51nod】1050 循环数组最大子段和
- [洛谷 2822]组合数问题---二项式定理+前缀和
- 【SQL Server学习笔记】20:JOIN运算符与其三种联结查询
- 日常笔记- finally的作用到底是什么
- Java SE、Java EE、Java ME三者的区别
- Eclipse无法查看源码(Source not found)的解决方法
- C++一本通题库1007
- HDFS架构和读写流程详解
- Tomcat和Java及servlet使用注意事项
- KD树的C++实现