感觉这种东西每次重推一遍怪麻烦的,就写在这里了。

说白了就是根据分治区间左端点是否为\(0\)分类讨论一下,一般是如果不是\(0\)就要乘\(2\),不过还是需要具体问题具体分析一下才好(就比如下面的例子)。

以下面这个东西为例给出代码:

\[f[0]=0,g[0]=0,f[1]=0,g[1]=1
\]

\[f[n]=\sum_{i=0}^{n}\binom{n-2}{i-1}(f[i]f[n-i]+g[i]f[n-i]+g[i]g[n-i])
\]

\[g[n]=\sum_{i=0}^{n}\binom{n-2}{i-1}f[i]g[n-i]
\]

void solve(int l,int r){
if(l==r){
if(l==0)f[l]=g[l]=0;
else if(l==1)f[l]=0,g[l]=1;
else f[l]=1ll*f[l]*fac[l-2]%MOD,g[l]=1ll*g[l]*fac[l-2]%MOD;
return;
}
int mid=((l+r)>>1);solve(l,mid);
m=(mid-l)+(r-l);prepare();
rin(i,0,mid-l)A[i]=1ll*f[l+i]*(l+i==0?0:invf[l+i-1])%MOD,B[i]=1ll*g[l+i]*(l+i==0?0:invf[l+i-1])%MOD;
rin(i,0,r-l)C[i]=1ll*f[i]*(i==0?0:invf[i-1])%MOD,D[i]=1ll*g[i]*(i==0?0:invf[i-1])%MOD;
ntt(A,1);ntt(B,1);ntt(C,1);ntt(D,1);
rin(i,0,n-1){
int temp=A[i];
A[i]=((l==0?1ll:2ll)*A[i]*C[i]+1ll*B[i]*C[i]+(l==0?0ll:1ll)*A[i]*D[i]+(l==0?1ll:2ll)*B[i]*D[i])%MOD;
B[i]=(1ll*B[i]*C[i]+(l==0?0ll:1ll)*temp*D[i])%MOD;
}
ntt(A,-1);ntt(B,-1);
rin(i,mid+1,r)f[i]=(f[i]+A[i-l])%MOD,g[i]=(g[i]+B[i-l])%MOD;
memset(A,0,n<<2);memset(B,0,n<<2);memset(C,0,n<<2);memset(D,0,n<<2);
solve(mid+1,r);
}

分治NTT:我 卷 我 自 己的更多相关文章

  1. #565. 「LibreOJ Round #10」mathematican 的二进制(期望 + 分治NTT)

    题面 戳这里,题意简单易懂. 题解 首先我们发现,操作是可以不考虑顺序的,因为每次操作会加一个 \(1\) ,每次进位会减少一个 \(1\) ,我们就可以考虑最后 \(1\) 的个数(也就是最后的和) ...

  2. LOJ2541 PKUWC2018猎人杀(概率期望+容斥原理+生成函数+分治NTT)

    考虑容斥,枚举一个子集S在1号猎人之后死.显然这个概率是w1/(Σwi+w1) (i∈S).于是我们统计出各种子集和的系数即可,造出一堆形如(-xwi+1)的生成函数,分治NTT卷起来就可以了. #i ...

  3. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  4. CF960G Bandit Blues 【第一类斯特林数 + 分治NTT】

    题目链接 CF960G 题解 同FJOI2016只不过数据范围变大了 考虑如何预处理第一类斯特林数 性质 \[x^{\overline{n}} = \sum\limits_{i = 0}^{n}\be ...

  5. 洛谷5月月赛T30212 玩游戏 【分治NTT + 多项式求ln】

    题目链接 洛谷T30212 题解 式子很容易推出来,二项式定理展开后对于\(k\)的答案即可化简为如下: \[k!(\sum\limits_{i = 0}^{k} \frac{\sum\limits_ ...

  6. loj2541 「PKUWC2018」猎人杀 【容斥 + 分治NTT】

    题目链接 loj2541 题解 思路很妙啊, 人傻想不到啊 觉得十分难求,考虑容斥 由于\(1\)号可能不是最后一个被杀的,我们容斥一下\(1\)号之后至少有几个没被杀 我们令\(A = \sum\l ...

  7. hdu5279 YJC plays Minecraft 【分治NTT】

    题目链接 hdu5279 题解 给出若干个完全图,然后完全图之间首尾相连并成环,要求删边使得两点之间路径数不超过\(1\),求方案数 容易想到各个完全图是独立的,每个完全图要删成一个森林,其实就是询问 ...

  8. CF960G Bandit Blues 分治+NTT(第一类斯特林数)

    $ \color{#0066ff}{ 题目描述 }$ 给你三个正整数 \(n\),\(a\),\(b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大 ...

  9. ZOJ3874 Permutation Graph 【分治NTT】

    题目链接 ZOJ3874 题意简述: 在一个序列中,两点间如果有边,当且仅当两点为逆序对 给定一个序列的联通情况,求方案数对\(786433\)取模 题解 自己弄了一个晚上终于弄出来了 首先\(yy\ ...

  10. HDU 5552 Bus Routes(2015合肥现场赛A,计数,分治NTT)

    题意  给定n个点,任意两点之间可以不连边也可以连边.如果连边的话可以染上m种颜色. 求最后形成的图,是一个带环连通图的方案数. 首先答案是n个点的图减去n个点能形成的树. n个点能形成的树的方案数比 ...

随机推荐

  1. SqlServer中插入数据后如何得到主键ID

    使用@@IDENTITY 例如:insert into student(name,age) values('fanqi',23) select @@identity 使用 OUTPUT inserte ...

  2. python-bioInfo-codes-2

    1. _tkinter.TclError: no display name and no $DISPLAY environment variable 解决方案: import matplotlibma ...

  3. HDU3336 Count the string(kmp

    It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ...

  4. cut,sort,awk,sed,tr,find,wc,uniq在Linux中的用法

    cut语法cut [-bn] [file]cut [-c] [file]cut [-df] [file] -b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志.-c ...

  5. python发起post请求获取json数据使用requests方法

    最普通的答案 我一直就觉得GET和POST没有什么除了语义之外的区别,自打我开始学习Web编程开始就是这么理解的 . 可能很多人都已经猜到了答案是: 1.GET 使用URL或Cookie传参.而POS ...

  6. ubuntu 16.04下ssh访问提示错误

    liuyan@ubuntu:/etc/init.d$ sudo apt-get install openssh-server -yReading package lists... DoneBuildi ...

  7. Qt 按键键值 与 相关字符串 的映射表(转)

    Qt快捷键 映射     "Esc",/*Qt::Key_Escape 0x01000000 */ "Tab",/*Qt::Key_Tab 0x01000001 ...

  8. 常见Http访问错误小结

    4xx 客户端错误# 400 bad request 错误的请求 # 401 未携带身份信息 # 403 forbidden 权限不够 # 404 Not Found# 405 请求方式不允许 5xx ...

  9. CXF实现webService服务(一)

    以前工作中也用CXF,但都是用别人现成搭好的环境,这次自己重头搭建一遍环境.过程中也有遇到的问题,也做了简单的整理. 对于CXF是干什么用的,我不想多说,大家都知道这是我们在Java编程中webSer ...

  10. contenteditable兼容问题

    正常情况下用contenteditable,IE下有兼容性问题需要将个别字母变成大写的contentEditable. 获取contenteditable的内容 对html进行处理 兼容 chrome ...