【NOIP2013模拟联考6】选课
来源:互联网 发布:手机淘宝哪里看直播 编辑:程序博客网 时间:2024/05/18 02:32
题目
你真的认为选课是那么容易的事吗?HYSBZ的ZY同志告诉你,原来选课也会让人产生一种想要回到火星的感觉。假设你的一周有n天,那么ZY编写的选课系统就会给你n堂课。但是该系统不允许在星期i和星期i+1的时候选第i堂课,也不允许你在星期n和星期一的时候选第n堂课。然后连你自己也搞不清哪种选课方案合法,哪种选课不合法了。你只想知道,你到底有多少种合法的选课方案。
分析
声明一下,参考了题解。
我们定义
求出这个,用容斥原理就很容易求出正确选课方案数量。
那怎么求
现在总共 n 堂课分别记为 1,2,…n,它们可放的天数可以表示为(1,2)(2,3)(3,4)…(n,1)现在我们把括号去掉即得到一个数列 1,2,2,3,3,4,….n,1,现在我们从里面取出 K 个数,分别表示 k 堂课所在的天数,现在只要求出满足这个条件的取法数就可以了。
但是,我们不能再同一天选两节课,那么第
接着,我们不能重复取一节课,那么第
也就是说,对于一个环,求从其中选取k个不相邻顶点得方案数:
证明:对于任意一个顶点A,先取A,然后再从不和A相邻的n-3个其他顶点中取k-1个不相邻顶点,显然可得到符合定理要求的组合,这个组合的个数为C((n-3)-(k-1)+1,k-1)=C(n-k-1,k-1)。一共有n个顶点,而且在每个组合中有k个元素,即可完成证明。
然后其余的随便选,
所以
THEN?容斥。
据说有种更强大的方法:这道提示有递推式滴!!!
但方法实在是太神奇了,根本就搞不懂。+_+
#include <cmath>#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <queue>const long long maxlongint=2147483647;const long long mo=1000000007;using namespace std;long long jc[210000],ans,n,ny[210000],nn[210000];long long mi(long long x,long long y){ long long sum=1; while(y) { if(y&1) sum=sum*x%mo; x=x*x%mo; y/=2; } return sum;}long long C(long long m,long long n){ return jc[m]*nn[m-n]%mo*nn[n]%mo;}long long W(long long k){ return n*2*ny[n*2-k]%mo*C(n*2-k,k)%mo*jc[n-k]%mo;}int main(){ for(long long i=0;i<=200005;i++) ny[i]=mi(i,mo-2); jc[0]=1; nn[0]=1; for(long long i=1;i<=200005;i++) { jc[i]=jc[i-1]*i%mo; nn[i]=mi(jc[i],mo-2); } while(scanf("%lld",&n)!=EOF) { if(n==1) { printf("0\n"); continue; } ans=jc[n]; for(long long i=1;i<=n;i++) { if(i%2) ans=(ans-W(i)+mo)%mo; else ans=(ans+W(i))%mo; } printf("%lld\n",ans); }}
- 【NOIP2013模拟联考6】选课
- 【NOIP2013模拟联考6】选课(select)
- 【NOIP2013模拟联考13】线段
- 【NOIP2013模拟联考7】数列
- 【NOIP2013模拟联考5】军训
- 【NOIP2013模拟联考7】OSU
- 【NOIP2013模拟联考5】军训(training)
- 【NOIP2013模拟联考5】军训(training) 题解
- NOIP2013模拟联考5】军训(training)
- 【NOIP2013模拟联考2】摘取作物(pick)
- 【NOIP2013模拟联考3】山峰(summits)
- 【NOIP2013模拟联考15】人类基因组(genes)
- 【NOIP2013模拟联考10】独立集(bubble)
- JZOJsenior3484.【NOIP2013模拟联考10】密码(substring)
- 【NOIP2013模拟联考14】图形变换(transform)
- 【NOIP2013模拟联考14】图形变换(transform)
- 3472. 【NOIP2013模拟联考8】匹配(match)
- [jzoj3472]【NOIP2013模拟联考8】匹配(match)
- FrameLayout &TableLayout
- RPC基本规则
- 网页 调起 手机地图APP ,定位,识别等。。。。
- Mysql 数据库规范 表设计 命名规范
- ACM4-1012
- 【NOIP2013模拟联考6】选课
- 整数转化为字符串数(完整程序)
- 自定义View,解决百分比布局适配时Textview的字体Textsize比例缩放问题
- iOS TheOperationCouldn'tbeCompleted
- Spring框架 AOP(三)
- opencv学习(1)——读入并显示一幅图片
- jQuery Mobile基础学习(1)
- 输出++++++
- Spring框架--实现使用配置文件控制对象的生成