博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2287. [HZOI 2015]疯狂的机器人 [FFT 组合计数]
阅读量:6080 次
发布时间:2019-06-20

本文共 1221 字,大约阅读时间需要 4 分钟。

题意:从原点出发,走n次,每次上下左右不动,只能在第一象限,最后回到原点方案数


这不煞笔提,组合数写出来发现卷积NTT,然后没考虑第一象限gg

其实就是
只不过这里\(C(i)\)是第\(\frac{i}{2}\)项,奇数为0
\(f[n]\)为走n次回到原点方案数,\[ f[n]=\sum_{i=0}^{n}C(i)C(n-i)\binom{n}{i}=n!\sum_{i=0}^{n}C(i)\frac{1}{i!}C(n-i)\frac{1}{(n-i)!} \]

注意阶乘和阶乘逆元别乘错了,别丢东西!!!

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N=(1<<18)+5, INF=1e9;const ll P=998244353;inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}ll Pow(ll a, ll b, ll P) { ll ans=1; for(; b; b>>=1, a=a*a%P) if(b&1) ans=ans*a%P; return ans;}namespace NTT{ int n, rev[N], g; void ini(int lim) { g=3; n=1; int k=0; while(n
>1]>>1) | ((i&1)<<(k-1)); } void dft(ll *a, int flag) { for(int i=0; i
>1; ll wn=Pow(g, flag==1 ? (P-1)/l : P-1-(P-1)/l, P); for(ll *p=a; p!=a+n; p+=l) { ll w=1; for(int k=0; k
>1) * inv[(i>>1)+1] %P * facInv[i] %P; mul(a, b); for(int i=0; i<=n; i++) a[i]=a[i]*fac[i]%P; ll ans=0; for(int m=0; m<=n; m+=2) (ans += C(n, m) * a[m]%P) %=P; printf("%lld\n", ans);}

转载地址:http://vyhgx.baihongyu.com/

你可能感兴趣的文章
SSH公钥认证
查看>>
前端切图实战(PSD设计稿转化为前端)
查看>>
华为手机使用objectAnimation异常
查看>>
leetcode 33. Search in Rotated Sorted Array 81. Search in Rotated Sorted Array II
查看>>
configSections必须是根节点下第一个节点
查看>>
ArcGIS数据融合
查看>>
ArcGIS中各种合并要素(Union、Merge、Append、Dissolve)的异同点分析 转载
查看>>
IEnumerable和IEnumerable<T>接口
查看>>
Linux fuser工具使用方法介绍
查看>>
批处理启动tomcat
查看>>
DropDownlist的DataTextField显示多列数据
查看>>
配置实现-静态网页生成
查看>>
微软学术搜索项目 10个版本的历程
查看>>
读书笔记《集体智慧编程》Chapter 7 : Modeling with Decision Tree
查看>>
在WebBrowser控件中获取鼠标在网页(不是浏览器窗口)上点击的位置,
查看>>
绝对不容错过的野生动物wildlife摄影作品
查看>>
开发过程中注意点
查看>>
UVA 10282 (13.08.18)
查看>>
获取类所在的方法的数据
查看>>
超简单MVC应用程序播放WMV视频
查看>>