首先对于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 题的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. SQL面试笔试经典题(Part 1)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记,持续更新... 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.htm ...

  7. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  8. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

  9. AWS开发人员认证考试样题解析

    最近在准备AWS的开发人员考试认证.所以特意做了一下考试样题.每道题尽量给出了文档出处以及解析. Which of the following statements about SQS is true ...

随机推荐

  1. id生成器

  2. python 内置操作函数

  3. POJ1182 NOI2001 食物链

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 77428   Accepted: 23067 Description ...

  4. 解决WSL上运行plantUML中文乱码问题

    生成UML图命令: java -jar plantuml.jar -charset UTF-8 my.txt 1. 保证my.txt 使用uft-8编码 2. wsl中安装中文字体: 如: sudo ...

  5. ML面试1000题系列(1-20)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 1.简要介绍SVM 全称是support vec ...

  6. Handling Missing Values

    1) A Simple Option: Drop Columns with Missing Values 如果这些列具有有用信息(在未丢失的位置),则在删除列时,模型将失去对此信息的访问权限. 此外, ...

  7. Qt: error lnk1158 无法运行rc.exe

    解决办法:(依据自己的环境而定) 将C:\Program Files (x86)\Windows Kits\\bin\10.0.15063.0\x64 目录下的rc.exe 和rcdll.dll 复制 ...

  8. Apache Camel继承Spring Boot 实现文件远程复制和转移

    pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-f ...

  9. linux 下 自己写的 html文件产生中文乱码问题 解决办法

    再文件顶部加上  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" / ...

  10. hdu1503 LCS

    题意:如果有相同的字母,这些字母只输出一次.其余的都输出. 先做一次LCS,标记相同的字母,然后回溯输出. #include<stdio.h> #include<string.h&g ...