[NOIP模拟测试9]题(Problem) 题解 (组合数全家桶+dp)
达哥送分给我我都不要,感觉自己挺牛批。
$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)的更多相关文章
- [NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
Orz 出题人石二队爷 我们可以先求出有n个点的联通欧拉图数量,然后使它删或增一条边得到我们要求的方案 也就是让它乘上$C_n^2$ (n个点里选2个点,要么删边要么连边,选择唯一) 那么接下来就是求 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组
2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色
2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...
- 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)
2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...
- NOIP模拟测试17&18
NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...
- 7.27 NOIP模拟测试9 随 (rand)+单(single)+题(problem)
T1 随 (rand) dp+矩阵优化+原根 看着题解懵了一晚上加一上午,最后还是看了DeepinC的博客才把暴力码出来,正解看得一知半解,循环矩阵也不太明白,先留坑吧.暴力里用二维矩阵快速幂会tle ...
- 「题解」NOIP模拟测试题解乱写I(29-31)
NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...
- 2019.7.29 NOIP模拟测试10 反思总结【T2补全】
这次意外考得不错…但是并没有太多厉害的地方,因为我只是打满了暴力[还没去推T3] 第一题折腾了一个小时,看了看时间先去写第二题了.第二题尝试了半天还是只写了三十分的暴力,然后看到第三题是期望,本能排斥 ...
随机推荐
- ARM 是什么
ARM Advanced RISC Machines. RISC 就是reduced instruction set computer 精简指令集计算机DSP digtal signal Proces ...
- HTML-参考手册: HTML ISO-8859-1
ylbtech-HTML-参考手册: HTML ISO-8859-1 1.返回顶部 1. HTML ISO-8859-1 参考手册 现代的浏览器支持的字符集: ASCII 字符集 标准 ISO 字符集 ...
- cs224d 作业 problem set2 (三) 用RNNLM模型实现Language Model,来预测下一个单词的出现
今天将的还是cs224d 的problem set2 的第三部分习题, 原来国外大学的系统难度真的如此之大,相比之下还是默默地再天朝继续搬砖吧 下面讲述一下RNN语言建模的数学公式: 给出一串连续 ...
- 65、salesforce的数据分页
<apex:page controller="PagingController"> <apex:form > <apex:pageBlock titl ...
- idea Maven 一键 mvn clean package
文章目录 方法一 方法二 方法一 方法二
- PowerDesigner小技巧(整理中)
1.在修改name的时候,code的值将跟着联动 修改方法:PowerDesign中的选项菜单里修改,在[Tool]-->[General Options]->[Dialog]->[ ...
- 树状数据删除(TP5)
应用场景:类似上图中树状菜单,选中一级菜单 点击上方删除按钮 所有子菜单删除 以下是代码截图(代码基于 TP5)
- jquery中attr方法和prop方法的区别
关于checked的属性,最重要的概念就是你要记住,它跟checked的状态值是毫无关系的,设置checked = "checked"或者checked = "true& ...
- %matplotlib inline 被注释掉后,pycharm不能生成图
目录 问题描述 解决方案 @ 问题描述 在 jupyter 编译器中 程序的开头,有这么一行 %matplotlib inline import numpy as np import matplotl ...
- Leetcode 跳跃游戏 II
题目链接:https://leetcode-cn.com/problems/jump-game-ii/ 题目大意: 略. 分析: 贪心 + DP. 代码如下: class Solution { pub ...