![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FFT
文章平均质量分 55
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
hdu5307 He is Flying FFT
处理一个前缀和,那么ans[x]=∑sum[i]−sum[j]=xi−jans[x]=\sum_{sum[i]-sum[j]=x}{i-j} 然后sum[i]−sum[j]sum[i]-sum[j]可以当成卷积做,不过由于FFT只支持乘法,因此可以先做一遍关于i的,再做一遍关于j的,然后相减。 注意0的情况。。。#include <bits/stdc++.h>using namespace s原创 2016-11-22 18:29:26 · 467 阅读 · 0 评论 -
codeforces 528D Fuzzy Search FFT
单调处理出第一个串往两边K个能覆盖的字符。 然后对四种字符每种字符做一遍FFT。 对于第一个串,如果这个位置不能匹配当前字符,那该位置为1。 对于第二个串,如果这个位置为当前字符,那该位置为1。 把第二个串反过来和第一个串跑FFT。 答案是在所有FFT中都为0的合法位置个数。#include <bits/stdc++.h>using namespace std;#define N 21原创 2016-12-13 21:00:15 · 409 阅读 · 0 评论 -
hdu 5322 Hope 分治 NTT
设f[i]f[i] 表示长度为i时的答案,那么 f[i]=∑i=1nCj−1i−1∗f[i−j]∗(j−1)!∗j2f[i]=\sum\limits_{i=1}^{n}C_{i-1}^{j-1}*f[i-j]*(j-1)!*j^2 然后这个东西直接分治fft就行了。 推错式子害死人。。。#include <bits/stdc++.h>using namespace std;#define原创 2016-12-28 11:21:05 · 474 阅读 · 0 评论 -
hdu 5279 YJC plays Minecraft 分治 NTT
答案中每个岛上一定是一坨森林。岛之间的边可以有可以没有。 不过要减去所有岛都1和a[i]连通并且所有岛之间的边都存在的情况。 设f[x]表示对于一个城镇数为x的岛,连成森林的方案数。 那么f[x]=∑i=0x−1f[i]∗v[x−i]∗Cx−i−1x−1f[x]=\sum\limits_{i=0}^{x-1}f[i]*v[x-i]*C_{x-1}^{x-i-1} =(x−1)!∑i=0x−1原创 2016-12-29 14:26:25 · 662 阅读 · 0 评论 -
uoj #86 mx的组合数 FFT 原根
把l,r的条件看成前缀相减,那么就是求Cnx%p(1≤x≤bound)C_x^n\%p(1\le x\le bound) 设n的p进制形式为a1a2a3....acnta_1a_2a_3....a_{cnt} bound的p进制形式为b1b2b3.....bcntb_1b_2b_3.....b_{cnt} 由lucas定理原式为∏Caixi\prod C_{x_i}^{a_i}。 设g[i]原创 2017-01-06 08:22:01 · 677 阅读 · 0 评论