【题目描述】

现在在二维平面内原点上有一只机器人

他每次操作可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格)

但是由于本蒟蒻施展的大魔法,机器人不能走到横坐标是负数或者纵坐标是负数的点上

否则他就会big bang

给定操作次数n,求有多少种不同的操作序列使得机器人在操作后会回到原点

输出答案模998244353后的结果

注意如果两个操作序列存在某一时刻操作不同,则我们认为这两个操作序列不同

【输入格式】

输入n,表示操作次数

n<=100000

【输出格式】

按要求输出答案

【样例输入】

3

【样例输出】

7

【提示】

样例解释:

机器人有7种操作序列

1、不走 不走 不走

2、不走 向右 向左

3、向右 不走 向左

4、向右 向左 不走

5、不走 向上 向下

6、向上 不走 向下

7、向上 向下 不走

将操作分3类:向上下,向左右,不动
$f[i]$表示只考虑前两类走i步到原点的方案数
$$f[n]=\sum_{i=0}^{n}a[i]*a[n-i]*\binom{n}{i}$$
$a[i]$表示向上向下(或向左向右)走i步回到原点的方案数
显然i为偶数时才有方案否则$a[i]$为0
然后不动就直接枚举f
$$ans=\sum_{i=0}^{n}f[i]*\binom{n}{i}$$
$a[i]$显然就是卡特兰数第$i/2$项
因为任意时刻向上的前缀和总是大于向下的
至于卷积就直接把组合数拆开,把分母分到a上,即:
$$a[i]=C[i/2]*i!^{-1}$$
NTT求出f后再乘上$n!$

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef int lol;
const int N=;
int Mod=;
int G=;
int a[*N],fac[*N],R[*N],ifac[*N],inv[*N],c[*N],f[*N],ans;
int qpow(int x,int y)
{
int res=;
while (y)
{
if (y&) res=1ll*res*x%Mod;
x=1ll*x*x%Mod;
y>>=;
}
return res;
}
void NTT(int *A,int len,int o)
{int wn,w,i,j,k,x,y;
for (i=;i<len;i++)
if (i<R[i]) swap(A[i],A[R[i]]);
for (i=;i<len;i<<=)
{
wn=qpow(G,(Mod-)/(i<<));
if (o==-) wn=qpow(wn,Mod-);
for (j=;j<len;j+=(i<<))
{
w=;
for (k=;k<i;k++,w=1ll*w*wn%Mod)
{
x=A[j+k];y=1ll*w*A[j+k+i]%Mod;
A[j+k]=x+y;
if (A[j+k]>=Mod) A[j+k]-=Mod;
A[j+k+i]=x-y;
if (A[j+k+i]<) A[j+k+i]+=Mod;
}
}
}
if (o==-)
{
int tmp=qpow(len,Mod-);
for (i=;i<len;i++)
A[i]=1ll*A[i]*tmp%Mod;
}
}
int main()
{
int i,len,lg,n;
scanf("%d",&n);
memset(a,,sizeof(a));
fac[]=fac[]=ifac[]=ifac[]=inv[]=;
for (i=;i<=n*;i++)
{
inv[i]=1ll*(Mod-Mod/i)*inv[Mod%i]%Mod;
fac[i]=1ll*fac[i-]*i%Mod;
ifac[i]=1ll*ifac[i-]*inv[i]%Mod;
}
for (i=;i<=n;i++)
c[i]=1ll*fac[i<<]*ifac[i]%Mod*ifac[i]%Mod*inv[i+]%Mod;
a[]=;
for (i=;i<=n;i++)
if ((i&)==)
a[i]=1ll*c[i>>]*ifac[i]%Mod;
len=;
while (len<=*n) len*=,lg++;
for (i=;i<len;i++)
R[i]=(R[i>>]>>)|((i&)<<(lg-));
NTT(a,len,);
for (i=;i<len;i++)
a[i]=1ll*a[i]*a[i]%Mod;
NTT(a,len,-);
for (i=;i<=n;i++)
f[i]=1ll*a[i]*fac[i]%Mod;
for (i=;i<=n;i++)
ans=1ll*(ans+1ll*f[i]*fac[n]%Mod*ifac[i]%Mod*ifac[n-i]%Mod)%Mod;
printf("%d\n",ans);
return ;
}

[HZOI 2015]疯狂的机器人的更多相关文章

  1. BZOJ 2287. [HZOI 2015]疯狂的机器人 [FFT 组合计数]

    2287. [HZOI 2015]疯狂的机器人 题意:从原点出发,走n次,每次上下左右不动,只能在第一象限,最后回到原点方案数 这不煞笔提,组合数写出来发现卷积NTT,然后没考虑第一象限gg 其实就是 ...

  2. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

  3. [COGS 2287][HZOI 2015]疯狂的机器人

    Description 题库链接 现在在二维平面内原点上有一只机器人,他每次可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格).机器人不能走到横坐标是负数或者纵坐标是负数的点上. 给 ...

  4. COGS2287 [HZOI 2015]疯狂的机器人

    [题目描述] 现在在二维平面内原点上有一只机器人 他每次操作可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格) 但是由于本蒟蒻施展的大魔法,机器人不能走到横坐标是负数或者纵坐标是负数 ...

  5. cojs 疯狂的重心 疯狂的机器人 题解报告

    疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这 ...

  6. Bitset([HZOI 2015]偏序++)

    Bitset简介 下面介绍C++ STL 中一个非常有用的东西: Bitset 类似于二进制状压,它可以把信息转化成一个01串存储起来 定义方法: 首先要#include<bitset>或 ...

  7. [cogs2314][HZOI 2015] Persistable Editor - 可持久化平衡树

    [cogs2314][HZOI 2015]Persistable Editor - 可持久化平衡树 题目链接 首先吐槽扯淡几句 [题目描述] 维护一种可持久化的文本编辑器,支持下列操作: 1 p st ...

  8. cogs 2123. [HZOI 2015] Glass Beads

    2123. [HZOI 2015] Glass Beads ★★★   输入文件:MinRepresentations.in   输出文件:MinRepresentations.out   简单对比时 ...

  9. COGS 2580. [HZOI 2015]偏序 II

    COGS 2580. [HZOI 2015]偏序 II 题目传送门 题目大意:给n个元素,每个元素有具有4个属性a,b,c,d,求i<j并且ai<aj,bi<bj,ci<cj, ...

随机推荐

  1. 『开源』设置系统 主音量(0~100 静音) VolumeHelper 兼容 Xp Win7 .Net 20 AnyCPU

    背景: 近来的生活一团乱麻,没心态写高大上的代码,于是就着手 写了几个 辅助类. 在整理 InkFx.Utils 时,发现有几个 辅助类 只写了定义,没有实现函数体,于是就 花了1天时间 完善了一下. ...

  2. beta冲刺5-咸鱼

    昨天的问题: 登陆页面的整合重新制作 各主机版本更迭 我的社团显示功能修改调整 主页的头部替换掉 +修复帖子无法显示内容的问题 +试着将邮箱等判定用正则表达式进行实时判定. 今天的完成: 主要是线下进 ...

  3. 20162327WJH程序设计与数据结构第七周总结

    学号 20162327 <程序设计与数据结构>第7周学习总结 教材学习内容总结 1.关于接口的理解:接口可以理解为比较纯粹的抽象类 2.接口的特点:用interface定义接口 接口中的方 ...

  4. Django restful-framework初步学习

    urls.py from django.conf.urls import include, url from django.contrib import admin from rest_framewo ...

  5. 【iOS】swift init构造器

    这几天在使用 Swift 重写原来的一个运动社交应用 SportJoin. 为什么要重写呢? 首先因为实在找不到设计师给我作图; 其次, 我也闲不下来, 想找一些项目做, 所以只好将原来的代码重写了. ...

  6. 《高级软件测试》web测试实践--12月30日记录

    考完数学,我们正式开始web测试实践的作业,今天,我们主要进行了方案的选择和人员的分工.任务计划和安排如上图所示. 任务进展:完成题目选择和人员分工: 遇到问题:暂无: 下一步任务:完成软件评测.用户 ...

  7. 使用Github pages+jekyll搭建自己的博客(windows版)

    最近突发奇想,想试试GitHub pages来搭建博客.网上一搜一大堆,嗯...看来还是挺简单的...于是自己撸起袖子干...... 结果对于我这种GitHub注册过,git 没用过,ruby.jek ...

  8. nyoj VF

    VF 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 Vasya is the beginning mathematician. He decided to make ...

  9. php的调试工具xdebug

    zend_extension = "D:/developsoftware/wamp/bin/php/php5.5.12/zend_ext/php_xdebug-2.2.5-5.5-vc11- ...

  10. mysql数据库基本操作

    下载地址 http://www.mysql.com/downloads/mysql/ 端口号:3306 用户名:root 密码:自定义 连接到MySQL服务器 >mysql -uroot -pr ...