Description

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

Input

第一行一个整数N,接下来N行,第i+2..i+N-1行,每行两个数,依次表示a[i],b[i] (0 < = i < N)。

Output

输出N行,每行一个整数,第i行输出C[i-1]。

Sample Input

5
3 1
2 4
1 1
2 4
1 4

Sample Output

24
12
10
6
1

Solution

QvQ我FFT也就能打个板子了
对FFT的运用还是不够到位,理解也只是仅仅停留在表面的地方
很多细节处以及证明并没有非常理解
啥时候数学底子够了再回来重新补FFT的证明什么奇奇怪怪的东西吧
反正学长告诉我我会打板子会用就好了
 
首先做这个题之前我还不知道FFT式子的基本形式(逃
 

像这样下标和一定的式子就能用FFT进行优化了

下方公式转自https://blog.csdn.net/ycdfhhc/article/details/50636751

因为我不会markdown

一开始我们发现初始式子并不是FFT的形式没法搞

然后我们就将B数组翻转过来,然后发现下标和一定了……

然后把式子用另一个D表示出来,然后就可以FFT了……

答案C(0~n-1)对应D(n-1,n+n-2)

快二轮了感觉没啥希望

Code

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #define N (400000+100)
  6. using namespace std;
  7.  
  8. double pi=acos(-1.0);
  9. int n,fn,l,r[N];
  10. struct complex
  11. {
  12. double x,y;
  13. complex (double xx=,double yy=)
  14. {
  15. x=xx; y=yy;
  16. }
  17. }a[N],b[N];
  18.  
  19. complex operator + (complex a,complex b){return complex(a.x+b.x,a.y+b.y);}
  20. complex operator - (complex a,complex b){return complex(a.x-b.x,a.y-b.y);}
  21. complex operator * (complex a,complex b){return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
  22. complex operator / (complex a,double b){return complex(a.x/b,a.y/b);}
  23.  
  24. void FFT(int n,complex *a,int opt)
  25. {
  26. for (int i=; i<n; ++i)
  27. if (i<r[i])
  28. swap(a[i],a[r[i]]);
  29. for (int k=; k<n; k<<=)
  30. {
  31. complex wn=complex(cos(pi/k),opt*sin(pi/k));
  32. for (int i=; i<n; i+=(k<<))
  33. {
  34. complex w=complex(,);
  35. for (int j=; j<k; ++j,w=w*wn)
  36. {
  37. complex x=a[i+j], y=w*a[i+j+k];
  38. a[i+j]=x+y; a[i+j+k]=x-y;
  39. }
  40. }
  41. }
  42. if (opt==-) for (int i=; i<n; ++i) a[i]=a[i]/n;
  43. }
  44.  
  45. int main()
  46. {
  47. scanf("%d",&n); n--;
  48. for (int i=; i<=n; ++i)
  49. scanf("%lf%lf",&a[i].x,&b[n-i].x);
  50. fn=;
  51. while (fn<=n+n) fn<<=, l++;
  52. for (int i=; i<fn; ++i)
  53. r[i]=(r[i>>]>>) | ((i&)<<(l-));
  54. FFT(fn,a,); FFT(fn,b,);
  55. for (int i=; i<=fn; ++i)
  56. a[i]=a[i]*b[i];
  57. FFT(fn,a,-);
  58. for (int i=n; i<=n+n; ++i)
  59. printf("%d\n",(int)(a[i].x+0.5));
  60. }

BZOJ2194:快速傅立叶之二(FFT)的更多相关文章

  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. bzoj 2194: 快速傅立叶之二 -- FFT

    2194: 快速傅立叶之二 Time Limit: 10 Sec  Memory Limit: 259 MB Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k & ...

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

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

  5. 【bzoj2194】快速傅立叶之二 FFT

    题意:给定序列a,b,求序列c,\(c(k)=\sum_{i=k}^{n-1}a(i)b(i-k)\) Solution: \[ c(k)=\sum_{i=k}^{n-1}a(i)b(i-k)\\ c ...

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

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

  7. bzoj2194: 快速傅立叶之二

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

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

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

  9. BZOJ.2194.快速傅立叶之二(FFT 卷积)

    题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...

随机推荐

  1. WES7 定制界面完整过程(去除所有windows标识)

    转载但有改动 红色字体记录 目的:实验从启动开始到出现桌面,不出现任何windows图标或标识.重大提示:在某些虚拟机上面操作和真实机器是不一样的,主机会容易很多;所以在虚拟机无法实现效果的时候使用主 ...

  2. group by 语句

    user E_book go 这样的程序会出错,因为play没有使用sum,所以要分组. group by play 有函数的和没有函数的表一起使用要用 GROUP BY .AVG 求平均值,只能与数 ...

  3. SpringBoot 开启debug

    项目基于gradle ,今天想断点debug一下springboot,查阅资料后,纪录一下步骤. 创建Remote 创建gradle.properities 在当前项目下创建gradle.proper ...

  4. MySQL中文问题

    -- 设置客户端显示字符集 mysql>set names utf8; -- 建表时设置表的字符集和引擎 CREATE TABLE table ( `abc` char(32) NOT NULL ...

  5. jdk动态代理与cglib代理、spring Aop代理原理-代理使用浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  6. jquery获取下拉框中的循环值

    <select class="test" id="projectno" name="projectno"> <option ...

  7. SPOJ2666 QTREE4

    我是萌萌的传送门 我是另一个萌萌的传送门 一道树分治……简直恶心死了……我在调代码的时候只想说:我*************************************************…… ...

  8. 001Spring 定时任务 Scheduled

    01.@Scheduled注解参数 @Scheduled支持fixedRate.fixedDelay.cron表达式参数.其中,fixedRate和fixedDelay没有区别,都是启动时执行1次,每 ...

  9. Spark企业级应用开发和调优

    1.Spark企业级应用开发和调优 Spark项目编程优化历程记录,主要介绍了Spark企业级别的开发过程中面临的问题和调优方法.包含合理分配分片,避免计算中间结果(大数据量)的collect,合理使 ...

  10. Oracle基础之分析表

    analyze table tablename compute statistics; analyze index indexname compute statistics; (analyze 不会重 ...