ZOJ3557利用隔板法分析排列组合
来源:互联网 发布:惠州惠阳区网络问政 编辑:程序博客网 时间:2024/04/30 15:29
ZOJ3557利用隔板法分析排列组合
分类: 数论2013-03-25 19:50 58人阅读 评论(0) 收藏 举报
题目:How Many Sets II
当然本题只要分析出来公式,然后利用Lucas解都是浮云了。本题由于p很大,所以就不能阶乘预处理了。
题意是:给一个集合,一共n个元素,从中选取m个元素,满足选出的元素中没有相邻的元素,这样的选法一共有多少种?
本题正是利用隔板法:
一开头摆好m个球,然后向m+1个空位插球。中间任意一个空位不可为空。最后这m个的编号就是它是第几个球。
那么就先在m-1个空位上放球。再用普通隔板,n-2*m+1个球放m+1个位子,就是C(n-m+1,m)
- #include <iostream>
- long long n,m,p;
- long long quick_mod(long long a,long long b)
- {
- long long ans=1;
- a%=p;
- while(b)
- {
- if(b&1)
- {
- ans=ans*a%p;
- b--;
- }
- b>>=1;
- a=a*a%p;
- }
- return ans;
- }
- long long C(long long n,long long m)
- {
- if(m>n)
- return 0;
- else
- {
- long long a,b,ans=1;
- for(long long i=1;i<=m;i++)
- {
- a=(n+i-m)%p;
- b=i%p;
- ans=ans*(a*quick_mod(b,p-2)%p)%p;
- }
- return ans;
- }
- }
- long long Lucas(long long n, long long m)
- {
- if(m==0) return 1;
- else return (C(n%p,m%p)*Lucas(n/p,m/p))%p;
- }
- int main()
- {
- long long x,y;
- while(std::cin>>x>>y>>p)
- {
- n=x-y+1;
- m=y;
- std::cout<<Lucas(n,m)<<std::endl;;
- }
- return 0;
- }
- ZOJ3557利用隔板法分析排列组合
- 排列组合——隔板法
- 隔板法
- 笔试小技巧--隔板法解排列组合问题(附代码)
- 【2016杭电女生赛1002】【排列组合 隔板法】Desert 对n做正整序列拆分的方案数
- uva 10943 隔板法
- 组合数 隔板法
- 后缀数组+贪心+隔板法
- 组合数学之隔板法
- B(ZOJ3557)
- 组合数学-利用挡板法解排列组合题
- UVA10943- How do you add?(隔板法)
- HDU 5366 【组合数+隔板法】
- hdu 5201(隔板法+容斥原理)
- 【组合数学】 放小球之隔板法
- 概率难题-hdu4602-隔板法,暴力
- hdu 3037 Saving Beans 隔板法+lucas
- HDU 3037(隔板法+组合数+Lucas)
- 闪回删除例子
- hdu 4585 shaolin (暴力)
- 连分数
- 自定义 GridView 分页代码
- numpy 1.7中 f2py示例和说明文档
- ZOJ3557利用隔板法分析排列组合
- Cross-Site Scripting(XSS): 跨站脚本攻击介绍
- Oracle中的两种验证方式:操作系统验证和密码文件验证
- poj(3228)Gold Transportation
- 转帖:场景贴换动画
- hdu3944(Lucas定理+预处理)
- IE, FireFox, Opera 浏览器支持CSS实现Alpha半透明的方法
- GIS地图开发之地图交互操作(增加、删除要素)与要素信息显示
- namespace和#define