HZOJ 题
首先对于n<=100的点,直接暴力dp,f[i][j][k]表示时间为i,在i,j位置的方案数,枚举转移即可,期望得分40。
if(n<=)
{
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
for(int y=;y<=;y++)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
f[i][x][]=(f[i-][x-][]+f[i-][x+][])%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
for(int y=;y<=;y++)
if(x==||y==)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=n+;x++)
for(int y=;y<=n+;y++)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
}
代码实现
type0:这里
type1:显然卡特兰数……
type2:居然是个dp
f[i]表示走了i步回到原点的方案数,枚举第一次回到原点时走过的步数j(为了存在合法解,j为偶数),则此时方案数为f[i-j]*catalan(j/2-1),复杂度为O(n^2)所以最大范围只出到1000.
type3:
枚举横向移动了多少步.横向移动i步时(为了存在合法解,i必须是偶数),方案数为C(n,i)*catalan(i/2)*catalan((n-i)/2)
可以这样考虑:横向移动了i步,因为只能在第一象限,所以横向是一个卡特兰数,同理纵向也是一个卡特兰数。
#include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
using namespace std;
const int mod=1e9+;
int n,t;
int f[][][];
LL f1[];
LL jc[];
LL poww(LL a,int b,int mod)
{
LL ans=;
while(b)
{
if(b&)ans=ans*a%mod;
a=a*a%mod;
b=b>>;
}
return ans;
}
LL C(int n,int m)
{
if(m>n)return ;
if(!m)return ;
return jc[n]*poww(jc[m],mod-,mod)%mod*poww(jc[n-m],mod-,mod)%mod;
}
LL H(int i)
{
return C(*i,i)*poww(i+,mod-,mod)%mod;
}
inline int read();
signed main()
{
n=read(),t=read();
if(n<=)
{
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
for(int y=;y<=;y++)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
f[i][x][]=(f[i-][x-][]+f[i-][x+][])%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=;x++)
for(int y=;y<=;y++)
if(x==||y==)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
if(t==)
{
f[][][]=;
for(int i=;i<=n;i++)
for(int x=;x<=n+;x++)
for(int y=;y<=n+;y++)
f[i][x][y]=((f[i-][x-][y]+f[i-][x+][y])%mod+(f[i-][x][y-]+f[i-][x][y+])%mod)%mod;
printf("%d\n",f[n][][]);
return ;
}
}
else
{
LL ans=;
jc[]=;for(int i=;i<=;i++)jc[i]=jc[i-]*i%mod;
if(t==)
{
int s,x,z,y;
for(s=;s<=n/;s++)
{
x=s;z=y=(n-s-x)/;
ans=(ans+jc[n]*poww(jc[s],mod-,mod)%mod*poww(jc[x],mod-,mod)%mod*poww(jc[z],mod-,mod)%mod*poww(jc[y],mod-,mod)%mod)%mod;
}
printf("%lld\n",ans%mod);
return ;
}
if(t==)
{
n=n/;ans=;
for(int i=n+;i<=*n;i++)ans=ans*i%mod;
ans=ans*poww(jc[n],mod-,mod);
printf("%lld\n",ans%mod);
return ;
}
if(t==)
{
f1[]=;
for(int i=;i<=n;i+=)
for(int j=;j<=i;j+=)
f1[i]=(f1[i]+*f1[i-j]*H(j/-)%mod)%mod;
printf("%lld\n",f1[n]%mod);
return ;
}
if(t==)
{
for(int i=;i<=n;i+=)
ans=(ans+C(n,i)*H(i/)%mod*H((n-i)/)%mod)%mod;
printf("%lld\n",ans);
return ;
}
}
}
inline int read()
{
int s=;char a=getchar();
while(a<''||a>'')a=getchar();
while(a>=''&&a<=''){s=s*+a-'';a=getchar();}
return s;
}
暴力和正解全在这里!!
HZOJ 题的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- SQL面试笔试经典题(Part 1)
本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...
- 刷LeetCode的正确姿势——第1、125题
最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...
- AWS的SysOps认证考试样题解析
刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...
- AWS开发人员认证考试样题解析
最近在准备AWS的开发人员考试认证.所以特意做了一下考试样题.每道题尽量给出了文档出处以及解析. Which of the following statements about SQS is true ...
随机推荐
- 大半夜吃饱了撑的帮人调IE玩
那高手的也是IE6,我也是IE6,但是他的IE6就总是进recv,我的IE6就进WSARecv,一点都不科学...擦..不调了.
- 【洛谷P3131】 【USACO16JAN】子共七
P3131 [USACO16JAN]子共七Subsequences Summing to Sevens 题目描述 Farmer John's cows are standing in a row, a ...
- 洛谷P2258 子矩阵[2017年5月计划 清北学堂51精英班Day1]
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...
- web前端开发必备技术
1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...
- QT_获取运行进程所在目录路径_1
QString getProcessPathForWin(int idProcess) { #ifdef Q_OS_WIN // access process path WCHAR name[]; Z ...
- Java连接Neo4j的两种方式
1.Neo4j数据库的两种方式 Neo4j可以以两种方式运行: Java应用程序中的嵌入式数据库 通过REST的独立服务器 不管哪一种方式,这个选择不会影响查询和使用数据库的方式. 它是由应用程序的性 ...
- 配置了两天python【python可以的】
首先是看cs231n 发现代码的版本是py2 而我只装了 py3(anaconda3) 怎么办呢 于是想办法装了 anaconda2 并与之共存 ,调用的时候用 activate py2调用 http ...
- python中几种单例模式的实现
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- CSS3圆环旋转效果
html结构: <div class="demo"></div> css结构: .demo{ width:250px; height:250px; bord ...
- 深入浅出Cocoa之类与对象【转】
最近打算写一些ObjC中比较底层的东西,尤其是 runtime 相关的.苹果已经将 ObjC runtime 代码开源了,我们可以从:http://opensource.apple.com/sourc ...