1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. using namespace std;
  7. const int maxn=;
  8. const double PI=acos(-);
  9. struct node{
  10. double real,imag;
  11. void clear(){real=imag=;}
  12. node operator +(const node &x){return (node){real+x.real,imag+x.imag};}
  13. node operator -(const node &x){return (node){real-x.real,imag-x.imag};}
  14. node operator *(const node &x){return (node){real*x.real-imag*x.imag,real*x.imag+imag*x.real};}
  15. }a[maxn],b[maxn],c[maxn],t1,t2,w,wn;
  16. int m,n,len,rev[maxn],ans[maxn];
  17. void read(int &x){
  18. x=; int f=; char ch;
  19. for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') f=-;
  20. for (;isdigit(ch);ch=getchar()) x=x*+ch-''; x*=f;
  21. }
  22. int Rev(int x){
  23. int temp=;
  24. for (int i=;i<=len;i++) temp<<=,temp+=(x&),x>>=;
  25. return temp;
  26. }
  27. void FFT(node *a,int op){
  28. for (int i=;i<n;i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
  29. for (int s=;s<=n;s<<=){
  30. wn=(node){cos(*op*PI/s),sin(*op*PI/s)};
  31. for (int i=;i<n;i+=s){
  32. w=(node){,};
  33. for (int j=i;j<i+s/;j++,w=w*wn){
  34. t1=a[j],t2=w*a[j+s/];
  35. a[j]=t1+t2,a[j+s/]=t1-t2;
  36. }
  37. }
  38. }
  39. }
  40. int main(){
  41. read(m); n=,len=;
  42. while (n<(m<<)) n<<=,len++;
  43. for (int i=;i<n;i++) rev[i]=Rev(i);
  44. for (int x,i=;i<m;i++) read(x),a[i].real=x,read(x),b[m--i].real=x;
  45. FFT(a,),FFT(b,);
  46. for (int i=;i<n;i++) c[i]=a[i]*b[i];
  47. FFT(c,-);
  48. for (int i=;i<n;i++) ans[i]=(int)round(c[i].real/n);
  49. for (int i=m-;i<*m-;i++) printf("%d\n",ans[i]);
  50. return ;
  51. }

题目链接: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: 快速傅立叶之二的更多相关文章

  1. bzoj2194 快速傅立叶之二 ntt

    bzoj2194 快速傅立叶之二 链接 bzoj 思路 对我这种和式不强的人,直接转二维看. 发现对\(C_k\)贡献的数对(i,j),都是右斜对角线. 既然贡献是对角线,我们可以利用对角线的性质了. ...

  2. [bzoj2194]快速傅立叶之二_FFT

    快速傅立叶之二 bzoj-2194 题目大意:给定两个长度为$n$的序列$a$和$b$.求$c$序列,其中:$c_i=\sum\limits_{j=i}^{n-1} a_j\times b_{j-i} ...

  3. BZOJ2194:快速傅立叶之二(FFT)

    Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...

  4. 2018.11.18 bzoj2194: 快速傅立叶之二(fft)

    传送门 模板题. 将bbb序列反过来然后上fftfftfft搞定. 代码: #include<bits/stdc++.h> #define ri register int using na ...

  5. bzoj千题计划256:bzoj2194: 快速傅立叶之二

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 相乘两项的下标 的 差相同 那么把某一个反过来就是卷积形式 fft优化 #include< ...

  6. BZOJ2194: 快速傅立叶之二(NTT,卷积)

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1776  Solved: 1055[Submit][Status][Discuss] Descript ...

  7. BZOJ2194 快速傅立叶之二 【fft】

    题目 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非负整数. 输入格式 ...

  8. BZOJ2194: 快速傅立叶之二 FFT_卷积

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  9. 【BZOJ2194】快速傅立叶之二

    [BZOJ2194]快速傅立叶之二 Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. ...

随机推荐

  1. 【转】Jsduck一个纯净的前端文档生成神器

    让前端程序更具可维护性,是一个老生常谈的问题,大多数时候我们都关注于应用层面的代码可维护性,如:OO.模块化.MVC,编码规范.可扩展和复用性,但这都是属于设计层面需要考虑的事情,可维护性还应包含另一 ...

  2. 服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败

    案例环境: 操作系统   : Microsoft Windows Server 2003 Standard Edtion SP2 数据库版本 : SQL Server 2005 Standard Ed ...

  3. DB监控-redis监控

    公司的redis业务很多,redis监控自然也是DB监控的一大模块,包括采集.展示.监控告警.本文主要介绍redis监控的主要指标和采集方法. 一.Redis监控系统逻辑 1.DBA通过前台页面添加r ...

  4. 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 ...

  5. [转]推荐highcharts学习网址

    highcharts学习网址1:http://www.hcharts.cn/docs/index.php?doc=basic(百度highcharts中文教程即可) highcharts学习网址2:h ...

  6. Android项目部署时,发生AndroidRuntime:android.view.InflateException: Binary XML file line #168: Error inflating class错误

    这个错误也是让我纠结了一天,当时写的项目在安卓虚拟机上运行都很正常,于是当我部署到安卓手机上时,点击登陆按钮跳转到用户主界面的时候直接结束运行返回登陆界面.    当时,我仔细检查了一下自己的代码,并 ...

  7. Cookie无法读取

    问题描述:用谷歌调试可以看到,但是用js去读取的时候,一直提示undefined

  8. 【第一篇献给markdown】markdown入门

    Markdown 是一种轻量级的「标记语言」,语法十分简单,常用的标记符号也不超过十个.虽然功能很强大,但是上手估计不用十分钟. 一些认识 Markdown 官方文档 这里可以看到官方的 Markdo ...

  9. Windows7台式电脑怎么调节屏幕亮度

     

  10. HDU2767Proving Equivalences[强连通分量 缩点]

    Proving Equivalences Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...