【HNOI模拟By YMD】move
Description
设P(n)为从(0,0)移动到点(n,0)的不同路径数目,移动的方式有以下三种:(x,y)->(x+1,y-1),(x,y)->(x+1,y),(x+y)->(x+1,y+1),并且路径不能和第四象限有交集。求P(n),并对10^9+7取模。
Input
第一行一个整数T,表示数据组数。
对于每组数据,一行一个整数n。
Output
对于每组数据,输出答案。
Data Range
20%:n≤10;
50%:n≤10000;
100%:n≤106,T≤10。
Solution
20%
直接O(3^n*n)的暴力枚举即可。
50%
考虑第一次直线y=0的点,假设是(i,0)。
那么从(1,1)到(i-1,1)之间的路径均在直线y=1的上方,显然有P(i-2)种。同理,从(x,0)到(n,0)之间的路径均在直线y=0的上方,有P(n-i)种。
所以,全部合起来可以得到P(n)=Σni=1 P(i-2)P(n-i),其中,规定P(-1)=P(0)=1。
其实可以在20%基础上打个表,考场有超过5人这样写。。。
100%
假设移动的路径中一共有i个(x,y)->(x+1,y+1),那么就一定会有i个(x,y)->(x+1,y-1),n-2i个(x,y)->(x+1,y)。
而如果不考虑所有的(x,y)->(x+1,y),那么路径的种数就是第i个Catalan数,设为C_i。如果加入(x,y)->(x+1,y),也就是在2i+1个空处中插入n-2i相同的球,方案数是C2in。
所以,P(n)=Σni=1 C_i C2in。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; typedef long long LL; #define N 1000010
#define MOD 1000000007 int t;
int n; LL f[N],d[N]; inline LL qpow(LL a,LL b)
{
LL ans=;
while (b)
{
if (b&)
ans=(1LL*ans*a)%MOD;
b>>=;
a=(1LL*a*a)%MOD;
}
return ans;
} inline LL C(LL x,LL y)
{
return f[x]*d[y]%MOD*d[x-y]%MOD;
} inline LL Catalan(LL x)
{
return (C(x<<,x)-C(x<<,x-)+MOD)%MOD;
} int main()
{
freopen("move.in","r",stdin);freopen("move.out","w",stdout);
scanf("%d",&t);
f[]=;
for (int i=;i<=;i++)
f[i]=f[i-]*i%MOD;
for (int i=;i<=;i++)
d[i]=qpow(f[i],MOD-)%MOD;
while (t--)
{
scanf("%d",&n);
LL ans=;
for (int i=;i<=n;i+=)
ans+=C(n,i)*Catalan(i>>),ans%=MOD;
printf("%lld\n",ans);
}
return ;
}
【HNOI模拟By YMD】move的更多相关文章
- 3194. 【HNOI模拟题】化学(无标号无根树计数)
Problem 求\(n\)个点的每个点度数不超过\(4\)的无标号无根树个数. Data constraint \(1\le n\le 500\) Solution 尝试着把问题一般化.我们来考虑一 ...
- 【HNOI模拟By lyp】Day2
1 toad1.1 题目描述 有 n 个石子, A B 两人博弈, A 先手. A 首先取若干个石子(至少一个,不能取完),然后B和A 再轮流取石子,每次取的石子不能超过 axb ( x 表示上次取的 ...
- 【HNOI模拟By lyp】Day1
1 xlk1.1 题目描述 给定一棵大小为 n 的无根树,求满足以下条件的四元组 (a, b, c, d) 的个数: 1. 1 ≤ a < b ≤ n 2. 1 ≤ c < d ≤ n 3 ...
- HNOI模拟 Day3.25 By Yqc
怕老婆 [问题描述] 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. ...
- HNOI模拟 Day3.23
一.拓扑(top)[ 题目描述]:给你一个有向二分图,求他的拓扑序列的个数.[ 输入]:第一行两个数 N,M,表示点数和边数.接下来 M 行每行两个数 a,b,表示 a 向 b 有一条有向边.[ 输出 ...
- HNOI模拟 Day3.22
第一题: 盾盾的打字机 (drdrd) [题目描述] 盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章. 由于有了上次的经验,盾盾预先准备好了一段模板 A 存在了内存中,并以此为基础 ...
- Linux命令大全完整版
1. linux系统管理命令 adduser 功能说明:新增用户帐号.语 法:adduser补充说明:在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐 ...
- [置顶] linux常用命令大全
SSH 密令控制台 user/pwd 一:停止tomcat 1,cd .. 进入根目录 2,cd home/ 3,ll 4,cd bin/ 进入tomcat bin目录 5,ll 6,ps -ef | ...
- Linux学习总结(1)——Linux命令大全完整版
Linux命令大全完整版 目 录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...
随机推荐
- iis如何在dos中注册
iis如何在dos中注册 2009-09-23 08:13 提问者采纳 cd \cd c:\windows\microsoft.net\framework\v2.0.50727aspnet_r ...
- http和socket
大多数情况下都是使用Http协议做网络通信的,少数情况下,如扣扣之类的即时通讯,就是用Socket建立长链接 Http一般都是短连接的,即客户端和服务端通讯一次后,服务端就关闭连接 Socket是长连 ...
- getQueryString(option)的用法
//页面参数接收1.function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...
- P2347 砝码称重(动态规划递推,背包,洛谷)
题目链接:P2347 砝码称重 参考题解:点击进入 纪念我第一道没理解题意的题 ''但不包括一个砝码也不用的情况'',这句话我看成了每个砝码起码放一个 然后就做不出来了 思路: 1.这题数据很小,10 ...
- WC2007 石头剪刀布 数学+最小费用最大流
题面: 有N个人参加一场比赛,赛程规定任意两个人之间都要进行一场比赛:这样总共有N*(N-1)/2场比赛.比赛已经进行了一部分,我们想知道在极端情况下,比赛结束后最多会发生多少剪刀石头布情况.即给出已 ...
- 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)
议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...
- MySQL与MyBatis中的查询记录
1.时间段查询 MySQL:select * from table where ctime >= CURDATE() and ctime <DATE_SUB(CURDATE(),INTER ...
- db2,差集
--漏报的数据 FROM A LEFT JOIN A′ ON 交集的条件 WHERE A′.xx IS NULL --多报的数据 FROM A′ LEFT JOIN A ON 交集的条件 WHERE ...
- DNS服务器原理简述、搭建主/从DNS服务器并实现智能解析
1. TLD:Top Level Domain 顶级域名 组织域:.com, .net, .org, .gov, .edu, .mil 国家域:.iq, .tw, .hk, .jp, .cn, ... ...
- Far Relative’s Problem (贪心 计算来的最多客人)
Description Famil Door wants to celebrate his birthday with his friends from Far Far Away. He has n ...