【模拟7.27】题(liu_runda的神题)(卡特兰数,组合数)
考场的SB经验不再分享
case 0:
一道组合计数的水题,具体不再讲可以看以前的相似题
case 1:
很明显的卡特兰计数,我们把长度为n的序列看成01串
由此可知我们需要满足从1——n中前缀1的数量不少于前缀0的数量
case 2:
满足可以在坐标轴上移动
设f[i]表示第i步回到原点,我们枚举第j步第一次回到起点
那么f[i]数组里就不会出现重复,这样可以保证正确性
同时要再次用到卡特兰数:
我们发现定义的特殊j是第一次回到起点,但cal中可以多次回到起点
但我们可以发现只要我们满足在1-j-1满足前缀和>=1即可,这样我们可以
发现现在序列一部分确定设正方向为1
1 1 .........0 0
这样中间部分就又是一个cal,这样我们直接乘cal(j/2-1)即可
(注意可能j是四个方向,于是乘4)
case 3:
同时在两轴及第一象限
直接用组合数,乘两个方向的cal即可
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<string>
5 #include<algorithm>
6 #include<cmath>
7 #include<stack>
8 #include<map>
9 #include<queue>
10 #define ps push_back
11 #define MAXN 1000001
12 #define ll long long
13 using namespace std;
14 ll n;
15 const ll mod=1000000007;
16 ll jie[MAXN],ni[MAXN],ni_c[MAXN];
17 ll C(ll x,ll y)
18 {
19 if(y>x)return 0;
20 return jie[x]*ni_c[y]%mod*ni_c[x-y]%mod;
21 }
22 ll cal(ll x)
23 {
24 return C(x*2,x)*ni[x+1]%mod;
25 }
26 ll f[MAXN];
27 int main()
28 {
29 ll orz;
30 scanf("%lld%lld",&n,&orz);
31 jie[0]=1;jie[1]=1;
32 ni[0]=1;ni[1]=1;
33 ni_c[0]=1;ni_c[1]=1;
34 for(ll i=2;i<=2*n+10;++i)
35 {
36 jie[i]=(jie[i-1]*i)%mod;
37 ni[i]=((mod-mod/i)*ni[mod%i])%mod;
38 ni_c[i]=(ni_c[i-1]*ni[i])%mod;
39 }
40 ll ans=0;
41 if(orz==0)
42 {
43 for(ll i=0;i<=n;i+=2)
44 {
45 ans=(ans+C(n,i)*C(i,i/2)%mod*C(n-i,(n-i)/2))%mod;
46 }
47 printf("%lld\n",ans%mod);
48 }
49 else if(orz==1)
50 {
51 if(n%2==1)
52 printf("0\n");
53 else
54 printf("%lld\n",(C(n,n/2)%mod*ni[n/2+1]%mod+mod)%mod);
55 }
56 else if(orz==3)
57 {
58 for(ll i=0;i<=n;i+=2)
59 {
60 ll th=C(n,i);
61 if((n-i)%2==1)continue;
62 ans=(ans+th*cal(i/2)%mod*cal((n-i)/2))%mod;
63 }
64 printf("%lld\n",ans);
65 }
66 else if(orz==2)
67 {
68 f[0]=1;
69 for(ll i=2;i<=n;i+=2)
70 {
71 for(ll j=0;j<=i;j+=2)
72 {
73 f[i]=(f[i]+4*f[i-j]*cal(j/2-1))%mod;
74 }
75 }
76 printf("%lld\n",f[n]);
77 }
78 }
【模拟7.27】题(liu_runda的神题)(卡特兰数,组合数)的更多相关文章
- 「模拟8.13」任(liu_runda的神题,性质分析)
考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...
- 飞(fly)(数学推导,liu_runda的神题)
大概看了两三个小时的题解,思考量很大,实现简单........ 20分: 明显看出,每个点的贡献是x*(x-1)/2;即组合数C(x,2),从x个线段中选出2个的方案数,显然每次相交贡献为1,n^2枚 ...
- 7.27 NOIP模拟测试9 随 (rand)+单(single)+题(problem)
T1 随 (rand) dp+矩阵优化+原根 看着题解懵了一晚上加一上午,最后还是看了DeepinC的博客才把暴力码出来,正解看得一知半解,循环矩阵也不太明白,先留坑吧.暴力里用二维矩阵快速幂会tle ...
- [agc007f] Shik and Copying String 模拟神题
Description "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...
- POJ 2484 A Funny Game(神题!)
一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而 ...
- BUAA 724 晴天小猪的神题(RMQ线段树)
BUAA 724 晴天小猪的神题 题意:中文题,略 题目链接:http://acm.buaa.edu.cn/problem/724/ 思路:对于询问x,y是否在同一区间,可以转换成有没有存在一个区间它 ...
- Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 177 Solved: 128[Submit][Status ...
- 【CF913F】Strongly Connected Tournament 概率神题
[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...
- 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)
http://www.lydsy.com/JudgeOnline/problem.php?id=2017 这题太神了,我想了一个中午啊 原来是看错题一直没理解题解说的,一直以为题解是错的QAQ “开始 ...
随机推荐
- 详解Tomcat核心配置、http协议
Tomcat服务器 Tomcat配置与部署(IDEA) https://www.cnblogs.com/gonghr/p/14731266.html Tomcat手工创建和打包第一个Web工程 在ap ...
- C#中的元组(Tuple)和结构体(struct)
在正常的函数调用中,一个函数只能返回一个类型的值,但在某些特殊情况下,我们可能需要一个方法返回多个类型的值,除了通过ref,out或者泛型集合可以实现这种需求外,今天,讲一下元组和结构体在这一方面的应 ...
- CodeForces - 879
A 题意:就是一共有n个医生,每个医生上班的时间是第Si天,之后每隔d天去上班,问最少多少天能够访问完这n名医生 思路:直接进攻模拟就可以 代码: 1 #include<iostream> ...
- traefik: 基础入门总结
traefik介绍 traefik-现代反向代理,也可称为现代边缘路由:traefik原声兼容主流集群,Kubernetes,Docker,AWS等.官方的定位traefik是一个让开发人员将时间花费 ...
- [Qt] 事件机制(一)
事件主要分为两种: 在与用户交互时发生.比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等 系统自动发生,比如计时器事件(timerEvent)等 每种事件对应一 ...
- [刷题] 226 Invert Binary Tree
要求 翻转一棵二叉树 实现 翻转左右子树,交换左右子树的根节点 1 class Solution { 2 public: 3 TreeNode* invertTree(TreeNode* root) ...
- [刷题] 75 Sort Colors
要求 给只有0 1 2三个元素的数组排序 思路 方法1:遍历数组,利用辅助数组保存三个元素的个数,再写入(遍历两遍) 辅助数组有三个元素,对应0 1 2的个数 方法2:模拟三路快排,遍历一遍完成排序 ...
- KVM 添加新硬件
1 显卡 spice 2视频 qxl驱动 3 声音 ich6最好 ich9最清楚 4 输入 鼠标 智能图 否则不能VNC找不到焦点 5 磁盘大小 至少80G 否则 无法自动安装 无swap和 ...
- ltp
1.查找文件 find / -name 'filename' 1 2.查找目录 find / -name 'path' -type d 1 3.查找内容 # find .| xargs grep ...
- Modbus RTU CRC校验码计算方法
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算. CRC计算方法是: 1. 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器. 2. ...