题目

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

输入格式

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

输出格式

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

输入样例

5

3 1

2 4

1 1

2 4

1 4

输出样例

24

12

10

6

1

题解

和2179几乎一模一样
由于卷积的定义要求下标之和为常数,我们尝试将原式变形,发现只要将a或者b反过来存就可以了

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<complex>
#include<algorithm>
#define pi acos(-1)
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 400005,maxm = 100005,INF = 1000000000;
inline int read(){int out = 0,flag = 1; char c = getchar();while (c < 48 || c > 57) {if (c == '-') flag = -1; c = getchar();}while (c >= 48 && c <= 57) {out = (out << 3) + (out << 1) + c - '0'; c = getchar();}return out * flag;
}
typedef complex<double> E;
E a[maxn],b[maxn];
int n,m,L,R[maxn];
void fft(E* a,int f){for (int i = 0; i < n; i++) if (i < R[i]) swap(a[i],a[R[i]]);for (int i = 1; i < n; i <<= 1){E wn(cos(pi / i),f * sin(pi / i));for (int j = 0; j < n; j += (i << 1)){E w(1,0);for (int k = 0; k < i; k++,w *= wn){E x = a[j + k],y = w * a[j + k + i];a[j + k] = x + y; a[j + k + i] = x - y;}}}if (f == -1) for (int i = 0; i < n; i++) a[i] /= n;
}
int main(){n = read(); n--;for (int i = 0; i <= n; i++){a[n - i] = read();b[i] = read();}m = n << 1; for (n = 1; n <= m; n <<= 1) L++;for (int i = 0; i < n; i++) R[i] = (R[i >> 1] >> 1) | ((i & 1) << (L - 1));fft(a,1); fft(b,1);for (int i = 0; i <= n; i++) a[i] *= b[i];fft(a,-1);for (int i = (m >> 1); i >= 0; i--) printf("%d\n",(int)(a[i].real() + 0.1));return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8350641.html

BZOJ2194 快速傅立叶之二 【fft】相关推荐

  1. bzoj2194 快速傅立叶之二

    2194: 快速傅立叶之二 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1730  Solved: 1026 [Submit][Status][D ...

  2. bzoj2194: 快速傅立叶之二

    了解到了FFT求卷积,但是还是感性的认识.. 取反就可以了.输出一定要加int!!!! #include<cstdio> #include<iostream> #include ...

  3. BZOJ-2194 快速傅立叶之二

    FFT模版题. 观察题目,我们可以发现,只要把序列b倒过来,再联想一下乘法运算... 我们会发现,将序列a和序列b当作100进制数,做一次乘法,然后从低到高每一位便是答案了(乘完无需进位) #incl ...

  4. 解题报告(二)C、(darkBZOJ 2194) 快速傅立叶之二(FFT、卷积的概念、常用变换)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  5. 快速傅立叶变换(FFT)

    FFT 作用:快速求两个多项式的乘积/卷积 文章目录 FFT 前置知识 复数(Complex) 单位根 离散傅立叶变换(Discrete Fourier Transform , DFT) 快速傅立叶变 ...

  6. 快速傅立叶变换:FFT算法原理及C++实现

    傅立叶变换以高等数学(微积分)中的傅立叶级数为基础发展而来,它是信号处理(特别是图像处理)中非常重要的一种时频变换手段,具有重要应用.在图像编码.压缩.降噪.数字水印方面都有重要意义.此外,快速傅立叶 ...

  7. BZOJ_2194_快速傅立叶之二_(FFT+卷积)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...

  8. [BZOJ]2194: 快速傅立叶之二

    题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...

  9. 【刷题】BZOJ 2194 快速傅立叶之二

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

最新文章

  1. 剑指offer 24:二叉搜索树的后序遍历序列
  2. [leetcode] 367. Valid Perfect Square
  3. (转) 设置sqlplus中的退格键
  4. 拓扑排序 确定比赛名次
  5. 前端学习(2925):vue改变样式1
  6. hbase 用户名密码_HBase开源 | HBase表管理系统HBaseManager2.0.2
  7. mysql error trace_防止DedeCMS错误警告日志data/mysql_error_trace.inc暴露后台管
  8. (转)机器学习入门,强烈推荐
  9. springcloud之ribbon负载均衡
  10. Java多窗口编程示例
  11. Matlab基础(5)——符号运算
  12. STM32单片机的学习方法(方法大体适用所有开发版入门)
  13. javaScript中内置对象Date基本操作入门
  14. WebRTC视频码率控制(一)—— CPU使用度检测
  15. 【dbeaver】发生了错误。请参阅日志文件
  16. Java(Spring boot)实现生成二维码
  17. VFS(virtual File System) 虚拟文件系统
  18. xctf攻防世界Leaking wp
  19. moodle基本安装、配置和迁移
  20. Invalid bound statement (not found)错误的可能原因

热门文章

  1. 【CyberSecurityLearning 49】PHP与MySQL进行交互
  2. SpringBoot中英文切换/国际化——java后端怎么用预置文本的内容替换web网页内容(Resource Bundle)
  3. visual c++ 部分窗口样式设置
  4. TSS详解 ——《x86汇编语言:从实模式到保护模式》读书笔记33
  5. ❤️你还在用visio画图吗?已经落伍啦!快来试试轻量级绘图神器draw.io吧!❤️
  6. Mysql:Mysql数据库系统表之详细了解INNODB_TRX、INNODB_LOCKs、INNODB_LOCK_waits、PROCESSLIST表
  7. pat天梯赛L1-050. 倒数第N个字符串
  8. java文件名特殊字符_Java 8:用名字读取特殊字符的文件
  9. Java-gt;Android并发编程引气入门篇
  10. Spring事务管理amp;数据库隔离级别