首先对于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. js经典校验之注册与登录校验

    平时都专注于后台功能的实现和逻辑需求的分析及数据库方面的设计,很少关注前端的设计,而项目开发过程中专门负责后台是不太可能的事,所以前端我们也需要会用,除了漂亮的首页等其他的交给美工来做,一些功能性的东 ...

  2. 让Drewtech的J2534 ToolBox 软件支持任何J2534的设备

    更改windows注册表中的FunctionLibrary和ConfigApplication,将DLL和exe路径替换原来的,其他不要动. 或者 create second key in regis ...

  3. win10 请求操作需要提升解决方案

    记录一下: win10   系统管理员 打开后缀为  .xxx 的文件时, 系统提示: 请求操作需要提升 网上搜索了一下,原因是权限不够,故系统提示. 给当前用户加入了 管理员权限,各种权限都无效. ...

  4. Vue--由自动获取焦点引出的DOM、mounted、自定义指令

    一.自动获取焦点的DOM实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  5. web前端学习(二)html学习笔记部分(10)-- HTML5构建应用布局和页面

    1.2.25  HTML5构建应用布局和页面 1.2.25.1  HTML5在移动开发中的准则 1.尽量使用单页面开发 2.慎重选择前端UI框架 3.动画.特效使用准则(60fps) 浏览器消耗最小的 ...

  6. webpack学习之—— Code Spliting(代码分离)

    代码分离特性能够把代码分离到不同的 bundle 中,然后可以按需加载或并行加载这些文件.代码分离可以用于获取更小的 bundle,以及控制资源加载优先级,如果使用合理,会极大影响加载时间. 有三种常 ...

  7. 官网svn提交到代码库,但是不能同步到web目录

    现象:数据库名字存在,但是数据库中表为空:svn提交代码能到svn库中,但不能同步到web目录. 原因:磁盘分区满了,导致内测服务器中数据库先删掉但没能从线上拉取回来,显示数据库中表为空: 磁盘满,导 ...

  8. VisualVM介绍使用

    1    打开VisualVM(这个工具放在JDK安装目录的bin目录下,双击jvisualvm.exe即可打开),如下图所示 以VisualVM自身为例,VisualVM本身也是一个java程序,当 ...

  9. 微信端的user-Agent

    在iPhone下,返回 Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Ge ...

  10. 【Leetcode 滑动窗口】顺次数(1291)

    题目 我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1 的整数. 请你返回由 [low, high] 范围内所有顺次数组成的 有序 列表(从小到大排序).   示例 1: 输出:low = ...