博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5730 Shell Necklace [分治fft | 多项式求逆]
阅读量:6844 次
发布时间:2019-06-26

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

题意:求递推式\(f_n = \sum_{i=1}^n a_i f_{n-i}\),模313


多么优秀的模板题

可以用分治fft,也可以多项式求逆

分治fft

注意过程中把r-l+1当做次数界就可以了,因为其中一个向量是[l,mid],我们只需要[mid+1,r]的结果。

多项式求逆

变成了

\[ A(x) = \frac{f_0}{1-B(x)} \]
的形式

要用拆系数fft,直接把之前的代码复制上就可以啦

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = (1<<18) + 5, mo = 313;const double PI = acos(-1.0);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;}struct meow{ double x, y; meow(double a=0, double b=0):x(a), y(b){}};meow operator +(meow a, meow b) {return meow(a.x+b.x, a.y+b.y);}meow operator -(meow a, meow b) {return meow(a.x-b.x, a.y-b.y);}meow operator *(meow a, meow b) {return meow(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);}meow conj(meow a) {return meow(a.x, -a.y);}typedef meow cd;namespace fft { int maxlen = 1<<17, rev[N]; cd omega[N], omegaInv[N]; void init() { for(int i=0; i
>1]>>1) | ((i&1)<<(k-1)); if(i < rev[i]) swap(a[i], a[rev[i]]); } for(int l=2; l<=n; l<<=1) { int m = l>>1; for(cd *p = a; p != a+n; p += l) for(int k=0; k
>1; cdq(l, mid); int n = 1; while(n < r-l+1) n <<= 1; for(int i=0; i
#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = (1<<18) + 5, mo = 313, P = 313;const double PI = acos(-1.0);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;}inline int Pow(int a, int b) { int ans = 1; for(; b; b>>=1, a=a*a%P) if(b&1) ans=ans*a%P; return ans;}struct meow{ double x, y; meow(double a=0, double b=0):x(a), y(b){}};meow operator +(meow a, meow b) {return meow(a.x+b.x, a.y+b.y);}meow operator -(meow a, meow b) {return meow(a.x-b.x, a.y-b.y);}meow operator *(meow a, meow b) {return meow(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x);}meow conj(meow a) {return meow(a.x, -a.y);}typedef meow cd;namespace fft { int maxlen = 1<<18, rev[N]; cd omega[N], omegaInv[N]; void init() { for(int i=0; i
>1]>>1) | ((i&1)<<(k-1)); if(i < rev[i]) swap(a[i], a[rev[i]]); } for(int l=2; l<=n; l<<=1) { int m = l>>1; for(cd *p = a; p != a+n; p += l) for(int k=0; k
>1); int n = l<<1; for(int i=0; i
>15), b[i] = cd(y[i]&32767); for(int i=l; i
>15), b[i] = cd(x[i]&32767), c[i] = cd(z[i]>>15), d[i] = cd(z[i]&32767); for(int i=l; i

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

你可能感兴趣的文章
把DataTable导入SqlServer中
查看>>
py2exe的逆向
查看>>
shell 游戏系列 俄罗斯方块
查看>>
DDOS和sql注入网络***实验
查看>>
DDN与×××备份互联
查看>>
Flask最佳实践
查看>>
kafka源码剖析(三)之日志管理-LogManager
查看>>
tcp连接wait连接过多解决
查看>>
EVE模拟器教程之如何设置预配
查看>>
Dell PowerEdge R720xd 上的 Microsoft Exchange 2010 与 R510 上的 Exchange 2007 之间的跨代大PK...
查看>>
A记录、NS记录、CNAME记录的区别和联系
查看>>
nginx搭建支持http和rtmp协议的流媒体服务器之---环境搭建
查看>>
Java 内存分配全面浅析
查看>>
Linux 文件与权限管理
查看>>
2016-12-7 第一次 测试
查看>>
ansible 安装与基本功能的使用
查看>>
AIX引导级别及级别修改
查看>>
获得第一批用户
查看>>
2月第一周网络安全报告:放马站点域名315个
查看>>
大数据,TB、PB、EB,你了解多少?
查看>>