bzoj2194: 快速傅立叶之二
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=;
const double PI=acos(-);
struct node{
double real,imag;
void clear(){real=imag=;}
node operator +(const node &x){return (node){real+x.real,imag+x.imag};}
node operator -(const node &x){return (node){real-x.real,imag-x.imag};}
node operator *(const node &x){return (node){real*x.real-imag*x.imag,real*x.imag+imag*x.real};}
}a[maxn],b[maxn],c[maxn],t1,t2,w,wn;
int m,n,len,rev[maxn],ans[maxn];
void read(int &x){
x=; int f=; char ch;
for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') f=-;
for (;isdigit(ch);ch=getchar()) x=x*+ch-''; x*=f;
}
int Rev(int x){
int temp=;
for (int i=;i<=len;i++) temp<<=,temp+=(x&),x>>=;
return temp;
}
void FFT(node *a,int op){
for (int i=;i<n;i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int s=;s<=n;s<<=){
wn=(node){cos(*op*PI/s),sin(*op*PI/s)};
for (int i=;i<n;i+=s){
w=(node){,};
for (int j=i;j<i+s/;j++,w=w*wn){
t1=a[j],t2=w*a[j+s/];
a[j]=t1+t2,a[j+s/]=t1-t2;
}
}
}
}
int main(){
read(m); n=,len=;
while (n<(m<<)) n<<=,len++;
for (int i=;i<n;i++) rev[i]=Rev(i);
for (int x,i=;i<m;i++) read(x),a[i].real=x,read(x),b[m--i].real=x;
FFT(a,),FFT(b,);
for (int i=;i<n;i++) c[i]=a[i]*b[i];
FFT(c,-);
for (int i=;i<n;i++) ans[i]=(int)round(c[i].real/n);
for (int i=m-;i<*m-;i++) printf("%d\n",ans[i]);
return ;
}
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2194
题目大意:请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5。 a,b中的元素均为小于等于100的非负整数。
做法:考虑把b数组翻转,Ck的计算就成为了裸的卷积,对于这种题目,翻转是个重要的手段。
bzoj2194: 快速傅立叶之二的更多相关文章
- bzoj2194 快速傅立叶之二 ntt
bzoj2194 快速傅立叶之二 链接 bzoj 思路 对我这种和式不强的人,直接转二维看. 发现对\(C_k\)贡献的数对(i,j),都是右斜对角线. 既然贡献是对角线,我们可以利用对角线的性质了. ...
- [bzoj2194]快速傅立叶之二_FFT
快速傅立叶之二 bzoj-2194 题目大意:给定两个长度为$n$的序列$a$和$b$.求$c$序列,其中:$c_i=\sum\limits_{j=i}^{n-1} a_j\times b_{j-i} ...
- BZOJ2194:快速傅立叶之二(FFT)
Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...
- 2018.11.18 bzoj2194: 快速傅立叶之二(fft)
传送门 模板题. 将bbb序列反过来然后上fftfftfft搞定. 代码: #include<bits/stdc++.h> #define ri register int using na ...
- bzoj千题计划256:bzoj2194: 快速傅立叶之二
http://www.lydsy.com/JudgeOnline/problem.php?id=2194 相乘两项的下标 的 差相同 那么把某一个反过来就是卷积形式 fft优化 #include< ...
- BZOJ2194: 快速傅立叶之二(NTT,卷积)
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1776 Solved: 1055[Submit][Status][Discuss] Descript ...
- BZOJ2194 快速傅立叶之二 【fft】
题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...
- BZOJ2194: 快速傅立叶之二 FFT_卷积
Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...
- 【BZOJ2194】快速傅立叶之二
[BZOJ2194]快速傅立叶之二 Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. ...
随机推荐
- 浅谈c#中的delegate和event了
一.开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那.好了,那就趁着阳光明媚的早晨简单来谈谈delegate和ev ...
- MongoDB-服务器管理
前言 本文主要涉及一下内容:数据库的备份和恢复,对于任一数据库来说备份至关重要:数据的导入和导出:数据库修复:数据库状态监控工具mongostat:在使用过程遇到其他命令会总结在此. 1.数据库的备份 ...
- git review & devops过程
自己搭建的devops环境是gitlab/gerrit/jenkins 1. 首先自己checkout一个自己的代码分支,一般不要在master上做直接修改 2. 修改后git add file, ...
- SQL Server解决孤立用户浅析
孤立用户概念 所谓孤立用户即指在服务器实例上未定义或错误定义了其相应 SQL Server 登录名的数据库用户无法登录到实例. 这样的用户被称为此服务器实例上的数据库的"孤立用 ...
- C++: 主要知识点
大学期间,学了一学期的C语言,当然包括学习数据结构时,用的也是C语言.当时刚刚接触计算机,对于编程更是一无所知.上课学习学习,偶尔会照着书上敲一下代码.大二下学期,就丢掉了不用了.最近由于工作的需要, ...
- mysql的DATE_FORMAT用法
DATE_FORMAT(date,format) date 参数是合法的日期.format 规定日期/时间的输出格式. mysql的DATE_FORMAT用法 %a 缩写星期名 %b 缩写月名 %c ...
- Mongodb基本数据类型、常用命令之增加、更新、删除
1.null---表示空值或者该字段不存在,如{"name":null} 2.布尔 --- 和java中的布尔一样,有两种:true,false,如{"sex" ...
- jackson官方快速入门文档
官方地址: http://jackson.codehaus.org/ http://wiki.fasterxml.com/JacksonInFiveMinutes http://wiki.faster ...
- Windows7开机登录界面背景图修改
首先,准备一张文件大小不超过250K的.jpg格式图片,文件名为:BackgroundDefault,图片分辨率建议与屏幕分辨率一致,因为这张背景无法像壁纸一样拉伸或者填充的. 打开这个路径,[C:\ ...
- oh-my-zsh主题
什么是ZSH Zsh和bash一样,是一种Unix shell,但大多数Linux发行版本都默认使用bash shell.但Zsh有强大的自动补全参数.文件名.等功能和强大的自定义配置功能. 一.安装 ...