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]。

题解:

求 $C_{k}=\sum a_{i}b_{i-k}$ 
卷积要求下标和要一定,然而这个情况下下标和并不是固定的.
为了让下标和固定,试着把 $b$ 给翻转一下,即 $b_{i}\Rightarrow b_{n-1-i}$
这样原来的式子就变为 $C_{k}=\sum a_{i}b_{n-1-(i-k)}$, 即 $C_{k}=\sum a_{i}b_{n-1-i+k}$
那么,下标和就是 $n-1+k$ 了,这个是固定的
将反转过来的 $b$ 与 $a$ 相乘后,$C_{k}$ 的答案就在相乘后多项式的$n-1+k$ 项了
试试把 $a$ 翻转过来,即 $a_{i}\Rightarrow a_{n-1-i}$ 那么原式为$C_{k}=\sum a_{n-1-i}b_{i-k}$
对于 $k$ 的下标和为 $n-1-k$,效果是相同的 
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 200000
#define pi 3.1415926535898
using namespace std;
int len=1,l,r[maxn<<1];
int ans[maxn];
char str1[maxn],str2[maxn];
struct Cpx{
double x,y;
Cpx(double t1=0,double t2=0){x=t1,y=t2;}
}A[maxn<<1],B[maxn<<1],C[maxn<<1],BB[maxn<<1];
Cpx operator+(Cpx a,Cpx b){ return Cpx(a.x+b.x,a.y+b.y);}
Cpx operator-(Cpx a,Cpx b){ return Cpx(a.x-b.x,a.y-b.y);}
Cpx operator*(Cpx a,Cpx b){ return Cpx(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void FFT(Cpx *a,int n,int flag){
for(int i=0;i<n;++i) if(i<r[i]) swap(a[i],a[r[i]]);
for(int mid=1;mid<n;mid<<=1){
Cpx wn(cos(pi/mid),flag*sin(pi/mid)),x,y;
for(int j=0;j<n;j+=(mid<<1)){
Cpx w(1,0);
for(int k=0;k<mid;++k){
x=a[j+k],y=w*a[j+mid+k];
a[j+k]=x+y,a[j+mid+k]=x-y;
w=w*wn;
}
}
}
}
int main(){
//setIO("input");
int n;
scanf("%d",&n);
for(int i=0;i<n;++i) scanf("%lf",&A[i].x),scanf("%lf",&BB[i].x);
for(int i=0;i<n;++i) B[i].x=BB[n-i-1].x;
while(len<n+n) len<<=1,++l;
for(int i=0;i<len;++i)
r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
FFT(A,len,1),FFT(B,len,1);
for(int i=0;i<=len;++i) C[i]=A[i]*B[i];
FFT(C,len,-1);
for(int i=0;i<=len;++i) ans[i]=(int)(C[i].x/len+0.5);
for(int i=0;i<n;++i) printf("%d\n",ans[i+n-1]);
return 0;
}

  

BZOJ2194: 快速傅立叶之二 FFT_卷积的更多相关文章

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

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

  2. bzoj2194 快速傅立叶之二 ntt

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

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

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

  4. bzoj2194: 快速傅立叶之二

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. RHEL 7 & CentOS 7禁用IPV6(转载)

    RHEL 7 & CentOS 7下禁用IPV6的方法和之前的版本不太一样了,本文整理了一下处理方法: 首先,我们必须给出最根本的解决方法:修改grub,在引导时就不加载IPV6模块 这样修改 ...

  2. 【真·干货】MySQL 索引及优化实战

    热烈推荐:超多IT资源,尽在798资源网 声明:本文为转载文章,为防止丢失所以做此备份. 本文来自公众号:GitChat精品课 原文地址:https://mp.weixin.qq.com/s/6V7h ...

  3. 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充

    /* * @Author: 我爱科技论坛* @Time: 20180705 * @Desc: 实现一个类似于JQuery功能的框架* V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架.内容 ...

  4. [2018.8.12]模拟赛B组

    T1 打表出奇迹,发现结论为\(E(a_n)=n+1\)即可. #include <iostream> #include <cstdio> #include <cctyp ...

  5. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  6. Python爬虫基础--分布式爬取贝壳网房屋信息(Client)

    1. client_code01 2. client_code02 3. 这个时候运行多个client就可以分布式进行数据爬取.

  7. BA--步进电机工作原理

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动 ...

  8. 【HDOJ 2063】过山车

    [HDOJ 2063]过山车 二分图最大匹配模板题 1女对n男 问匹配最大对数 代码例如以下: #include <iostream> #include <cstdlib> # ...

  9. HDU 4344

    其实不过是大整数分解... 注意两点:注意L 不能==N 但是,N却可以是素数...囧 #include <iostream> #include <cstdio> #inclu ...

  10. Flask + mod_wsgi + Apache on Windows 部署成功(随时接受提问)

    前言 说是前言,纯粹就是吐槽. 假设你赶时间.全然能够跳过这部分,我保证不会在这里隐藏不论什么实用的内容. 人上年纪后.可能冲劲不足,我花了大概两周的时间才成功的将flask部署到windows上.还 ...