达哥送分给我我都不要,感觉自己挺牛批。

$type=0:$

跟visit那题类似,枚举横向移动的步数直接推公式:

$ans=\sum C_n^i \times C_i^{\frac{i}{2}} \times C_{n-i}^{\frac{n-i}{2}},i\% 2=0$

$type=1:$

因为不能触碰负半轴,所以可以把右移看成+1,左移看成-1,转化为前缀和大于等于0的问题

于是直接Catalan数就好了。注意是第$\frac {n}{2}$项的Catalan。

$Catalan_n=C_{2n}^{n}-C_{2n}^{n-1}$

$type=2:$

观察到数据范围较小,考虑dp。

设$f[i]$为走i步回到原点的方案数,通过枚举第一次回到原点的步数j进行转移。

显然j只能为偶数。

$f[i]=\sum f[i-j]*Catalan(\frac{j}{2}-1)$

$type=3:$

还是枚举横向走的步数,结合Catalan数求解。

$ans=\sum C_n^i*Catalan(\frac{i}{2})*Catalan(\frac{n-i}{2})$

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=;
const int N=;
int n,op;
ll fac[N<<],ans,dp[N<<];
ll qpow(ll a,ll b)
{
ll res=;//a%=mod;
while(b)
{
if(b&)res=res*a%mod;
a=a*a%mod;
b>>=;
}
return res;
}
ll ini()
{
fac[]=;
for(int i=;i<=(N-)<<;i++)
fac[i]=1LL*i*fac[i-]%mod;
}
ll C(ll x,ll y)
{
if(y>x)return ;
return fac[x]*qpow(fac[y],mod-)%mod*qpow(fac[x-y],mod-)%mod;
}
ll lucas(ll x,ll y)
{
if(!y)return ;
return C(x%mod,y%mod)*lucas(x/mod,y/mod)%mod;
}
ll Catalan(ll x)
{
return (lucas(x*,x)-lucas(x*,x-)+mod)%mod;
}
void qj1()
{
//cout<<2*n<<endl;
//cout<<C(2*n,n)<<endl;
ans=Catalan(1LL*n/);
cout<<ans<<endl;
}
void qj0()
{
for(int i=;i<=n;i++)
{
if(i%)continue;
ans+=lucas(1LL*n,1LL*i)%mod*lucas(1LL*i,1LL*i/)%mod*lucas(1LL*(n-i),1LL*(n-i)/)%mod,ans%=mod;
}
cout<<ans<<endl;
}
void qj3()
{
for(int i=;i<=n;i++)
{
if(i%)continue;
ans+=lucas(1LL*n,1LL*i)*Catalan(1LL*i/)%mod*Catalan(1LL*(n-i)/)%mod,ans%=mod;
}
cout<<ans<<endl;
}
void qj2()
{
dp[]=;
for(int i=;i<=n;i+=)
for(int j=;j<=i;j+=)
dp[i]+=dp[i-j]*%mod*Catalan(1LL*j/-1LL)%mod,dp[i]%=mod;
cout<<dp[n]<<endl;
}
int main()
{
scanf("%d%d",&n,&op);
ini();
if(op==)qj1();
else if(op==)qj0();
else if(op==)qj3();
else qj2();
return ;
}

[NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)的更多相关文章

  1. [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)

    Orz 出题人石二队爷 我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案 也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一) 那么接下来就是求 ...

  2. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  3. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  5. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  6. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

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

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

  8. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  9. 2019.7.29 NOIP模拟测试10 反思总结【T2补全】

    这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...

随机推荐

  1. SCP-Py-001

    项目编号:Py-001 项目等级:Euclid 特殊收容措施: Py-001必须被存储于基金会主站的网络硬盘中,并切断一切与互联网的连接. Py-001突破收容在网络上传播后,一旦在一台计算机上被下载 ...

  2. paper 148: Face Databases

    持续更新ing~ 1.人脸检测数据库: (1999年发布)CMU+MIT:180幅图像,共734个人脸.包含3个正面人脸测试子集和一个旋转人脸测试子集,其中正面人脸测试子集有130幅图像,共511个人 ...

  3. <Jmeter入门不放弃>之<2.常用功能>

    大家这里参考学习的时候,我就不在这里配截图了,因为需要你打开工具根据文档自己去找,才有印象,大家一定要启动JMeter!跟着理解操作 一.测试计划 用来描述一个性能测试,所有内容都是基于这个计划,这谁 ...

  4. pycharm 代码无法自动补全(自动顺带)的解决方法

    pycharm 中输入关键字等,代码不能自动补全,这种情况一般是pycharm设置了省电模式 点击 File —Power Save Mode,取消勾选 再次输入,代码可以自动顺带出来了

  5. Wireshark协议分析1

    一.界面简介   1.抓包工具栏 2.文件工具栏 3.包定位工具栏 4.颜色以及滚动界面工具栏 5.数据包列表字体定义工具栏 6.首选项工具栏 二.过滤规则 1.过滤 IP ip.src eq 192 ...

  6. loj2009. 「SCOI2015」小凸玩密室

    「SCOI2015」小凸玩密室 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边也有个 ...

  7. [六省联考2017]分手是祝愿 题解(期望dp)

    题目描述 B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 1 到 n 的正整数. 每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示 ...

  8. BZOJ 4545

    bzoj 4545 给定一个踹树,支持几种操作. 本质不同子串询问 加入子树 询问字符串\(S\) 在树上的出现次数. 好码好码 重点就是维护\(parent\) 树,考虑用\(LCT\)维护此树. ...

  9. HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解

    目录 题意: 解析 原题描述 字典树动态求Mex @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\ ...

  10. Hive 时间操作函数(转)

    1.日期函数UNIX时间戳转日期函数: from_unixtime 语法:   from_unixtime(bigint unixtime[, string format]) 返回值: string ...