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. ...
随机推荐
- 【转】Jsduck一个纯净的前端文档生成神器
让前端程序更具可维护性,是一个老生常谈的问题,大多数时候我们都关注于应用层面的代码可维护性,如:OO.模块化.MVC,编码规范.可扩展和复用性,但这都是属于设计层面需要考虑的事情,可维护性还应包含另一 ...
- 服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败
案例环境: 操作系统 : Microsoft Windows Server 2003 Standard Edtion SP2 数据库版本 : SQL Server 2005 Standard Ed ...
- DB监控-redis监控
公司的redis业务很多,redis监控自然也是DB监控的一大模块,包括采集.展示.监控告警.本文主要介绍redis监控的主要指标和采集方法. 一.Redis监控系统逻辑 1.DBA通过前台页面添加r ...
- 7 Must Read Python Books
7 Must Read Python Books I started learning Python just two years ago. Coming from a C++ and Java ba ...
- [转]推荐highcharts学习网址
highcharts学习网址1:http://www.hcharts.cn/docs/index.php?doc=basic(百度highcharts中文教程即可) highcharts学习网址2:h ...
- Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误
这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面. 当时,我仔细检查了一下自己的代码,并 ...
- Cookie无法读取
问题描述:用谷歌调试可以看到,但是用js去读取的时候,一直提示undefined
- 【第一篇献给markdown】markdown入门
Markdown 是一种轻量级的「标记语言」,语法十分简单,常用的标记符号也不超过十个.虽然功能很强大,但是上手估计不用十分钟. 一些认识 Markdown 官方文档 这里可以看到官方的 Markdo ...
- Windows7台式电脑怎么调节屏幕亮度
- HDU2767Proving Equivalences[强连通分量 缩点]
Proving Equivalences Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...