考场的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. 1 #include<iostream>
  2. 2 #include<cstdio>
  3. 3 #include<cstring>
  4. 4 #include<string>
  5. 5 #include<algorithm>
  6. 6 #include<cmath>
  7. 7 #include<stack>
  8. 8 #include<map>
  9. 9 #include<queue>
  10. 10 #define ps push_back
  11. 11 #define MAXN 1000001
  12. 12 #define ll long long
  13. 13 using namespace std;
  14. 14 ll n;
  15. 15 const ll mod=1000000007;
  16. 16 ll jie[MAXN],ni[MAXN],ni_c[MAXN];
  17. 17 ll C(ll x,ll y)
  18. 18 {
  19. 19 if(y>x)return 0;
  20. 20 return jie[x]*ni_c[y]%mod*ni_c[x-y]%mod;
  21. 21 }
  22. 22 ll cal(ll x)
  23. 23 {
  24. 24 return C(x*2,x)*ni[x+1]%mod;
  25. 25 }
  26. 26 ll f[MAXN];
  27. 27 int main()
  28. 28 {
  29. 29 ll orz;
  30. 30 scanf("%lld%lld",&n,&orz);
  31. 31 jie[0]=1;jie[1]=1;
  32. 32 ni[0]=1;ni[1]=1;
  33. 33 ni_c[0]=1;ni_c[1]=1;
  34. 34 for(ll i=2;i<=2*n+10;++i)
  35. 35 {
  36. 36 jie[i]=(jie[i-1]*i)%mod;
  37. 37 ni[i]=((mod-mod/i)*ni[mod%i])%mod;
  38. 38 ni_c[i]=(ni_c[i-1]*ni[i])%mod;
  39. 39 }
  40. 40 ll ans=0;
  41. 41 if(orz==0)
  42. 42 {
  43. 43 for(ll i=0;i<=n;i+=2)
  44. 44 {
  45. 45 ans=(ans+C(n,i)*C(i,i/2)%mod*C(n-i,(n-i)/2))%mod;
  46. 46 }
  47. 47 printf("%lld\n",ans%mod);
  48. 48 }
  49. 49 else if(orz==1)
  50. 50 {
  51. 51 if(n%2==1)
  52. 52 printf("0\n");
  53. 53 else
  54. 54 printf("%lld\n",(C(n,n/2)%mod*ni[n/2+1]%mod+mod)%mod);
  55. 55 }
  56. 56 else if(orz==3)
  57. 57 {
  58. 58 for(ll i=0;i<=n;i+=2)
  59. 59 {
  60. 60 ll th=C(n,i);
  61. 61 if((n-i)%2==1)continue;
  62. 62 ans=(ans+th*cal(i/2)%mod*cal((n-i)/2))%mod;
  63. 63 }
  64. 64 printf("%lld\n",ans);
  65. 65 }
  66. 66 else if(orz==2)
  67. 67 {
  68. 68 f[0]=1;
  69. 69 for(ll i=2;i<=n;i+=2)
  70. 70 {
  71. 71 for(ll j=0;j<=i;j+=2)
  72. 72 {
  73. 73 f[i]=(f[i]+4*f[i-j]*cal(j/2-1))%mod;
  74. 74 }
  75. 75 }
  76. 76 printf("%lld\n",f[n]);
  77. 77 }
  78. 78 }

【模拟7.27】题(liu_runda的神题)(卡特兰数,组合数)的更多相关文章

  1. 「模拟8.13」任(liu_runda的神题,性质分析)

    考场时没有发现性质,用了个前缀和优化暴力,结果写WA了 我们发现其实联通块的个数就是点的个数-边的个数 然后我们需要维护横向上和纵向上的边的前缀和 前缀和的查询形式稍改一下 暴力 1 #include ...

  2. 飞(fly)(数学推导,liu_runda的神题)

    大概看了两三个小时的题解,思考量很大,实现简单........ 20分: 明显看出,每个点的贡献是x*(x-1)/2;即组合数C(x,2),从x个线段中选出2个的方案数,显然每次相交贡献为1,n^2枚 ...

  3. 7.27 NOIP模拟测试9 随 (rand)+单(single)+题(problem)

    T1 随 (rand) dp+矩阵优化+原根 看着题解懵了一晚上加一上午,最后还是看了DeepinC的博客才把暴力码出来,正解看得一知半解,循环矩阵也不太明白,先留坑吧.暴力里用二维矩阵快速幂会tle ...

  4. [agc007f] Shik and Copying String 模拟神题

    Description ​ "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...

  5. POJ 2484 A Funny Game(神题!)

    一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而 ...

  6. BUAA 724 晴天小猪的神题(RMQ线段树)

    BUAA 724 晴天小猪的神题 题意:中文题,略 题目链接:http://acm.buaa.edu.cn/problem/724/ 思路:对于询问x,y是否在同一区间,可以转换成有没有存在一个区间它 ...

  7. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status ...

  8. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  9. 【BZOJ】2017: [Usaco2009 Nov]硬币游戏(dp+神题+博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2017 这题太神了,我想了一个中午啊 原来是看错题一直没理解题解说的,一直以为题解是错的QAQ “开始 ...

随机推荐

  1. spring中注解@Resource 与@Autowire 区别

    ① .@Resource 是根据名字进行自动装配:@Autowire是通过类型进行装配. ②. @Resource 注解是 jdk 的:@Autowire 是spring的.

  2. 在局域网内知道计算机的名字查找计算机的IP

    第一步 nbtstat -a 计算机名字 第二步 nbtstat -c 可以看到计算机地址

  3. L SERVER 数据库被标记为“可疑”的解决办法

    问题背景: 日常对Sql Server 2005关系数据库进行操作时,有时对数据库(如:Sharepoint网站配置数据库名Sharepoint_Config)进行些不正常操作如数据库在读写时而无故停 ...

  4. 混部之殇-论云原生资源隔离技术之CPU隔离(一)

    作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...

  5. 制作一个简单的toast弹框

    toast弹框的作用 toast弹框顾名思义,就是为了弹出一个提示框,效果如图: 使用toast弹框可以可用户带来更好的交互体验 toast弹框的使用 Toast组件 制做出toast的样式以及出现的 ...

  6. phpstudy2018 开启目录浏览

    废话不多说直接开始 一.打开 vhosts-ini 配置文件 二.加入以下内容  注意填写自己的网站根目录 <Directory "你自己的网站根目录"> Option ...

  7. ffmpeg实践

    将mov视频解码300帧,并保存为1024:576分辨率,yuv420格式 ffmpeg -i Community_SneakAttack.mov -aspect 16:9 -vf scale=102 ...

  8. “可变的”tuple

    来看一个"可变的"tuple: >>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >> ...

  9. 2020BUAA-个人博客-案例分析

    个人博客作业-软件案例分析 项目 内容 北航2020软工 班级博客 作业要求 具体要求 我的课程目标 通过案例分析提升自己对于软件工程的认识 课程收获 分析软件,了解软件的定位 第一部分 调研,评测( ...

  10. Go 函数详解

    一.函数基础 函数由函数声明关键字 func.函数名.参数列表.返回列表.函数体组成 函数是一种类型.函数类型变量可以像其他类型变量一样使用,可以作为其他函数的参数或返回值,也可以直接调用执行 函数名 ...