Periodic Signal
时间限制:5000ms
单点时限:5000ms
内存限制:256MB

Description

Profess X is an expert in signal processing. He has a device which can send a particular 1 second signal repeatedly. The signal is A0 ... An-1 under n Hz sampling.

One day, the device fell on the ground accidentally. Profess X wanted to check whether the device can still work properly. So he ran another n Hz sampling to the fallen device and got B0 ... Bn-1.

To compare two periodic signals, Profess X define the DIFFERENCE of signal A and B as follow:

You may assume that two signals are the same if their DIFFERENCE is small enough. 
Profess X is too busy to calculate this value. So the calculation is on you.

Input

The first line contains a single integer T, indicating the number of test cases.

In each test case, the first line contains an integer n. The second line contains n integers, A0 ... An-1. The third line contains n integers, B0 ... Bn-1.

T≤40 including several small test cases and no more than 4 large test cases.

For small test cases, 0<n≤6⋅103.

For large test cases, 0<n≤6⋅104.

For all test cases, 0≤Ai,Bi<220.

Output

For each test case, print the answer in a single line.

Sample Input
2
9
3 0 1 4 1 5 9 2 6
5 3 5 8 9 7 9 3 2
5
1 2 3 4 5
2 3 4 5 1
Sample Output
80
0
/** hihocoder 1388 Periodic Signal** 把式子变形一下就是求Ai*Bi+k求和的最大值,想到用FFT来求* 会因为精度问题不能过,这是找出最小的那个k,然后重新算即可。*/#include <bits/stdc++.h>
using namespace std;const int MAXN = 200000+10;
const double PI = acos(-1.0);struct Complex
{double r,i;Complex(double _r=0,double _i=0):r(_r),i(_i){}Complex operator + (const Complex& rhs){return Complex(r+rhs.r,i+rhs.i);}Complex operator - (const Complex& rhs){return Complex(r-rhs.r,i-rhs.i);}Complex operator * (const Complex &rhs){return Complex(r*rhs.r - i*rhs.i,i*rhs.r + r*rhs.i);}
};
/** 进行FFT和IFFT前的反转变换。* 位置i和 (i二进制反转后位置)互换* len必须取2的幂*/
void Rader(Complex F[],int len)
{int j = len >> 1;for(int i = 1;i < len - 1;++i){if(i < j) swap(F[i],F[j]);  // reverseint k = len>>1;while(j>=k){j -= k;k >>= 1;}if(j < k) j += k;}
}
/** 做FFT* len必须为2^k形式,* on==1时是DFT,on==-1时是IDFT*/
void FFT(Complex F[],int len,int t)
{Rader(F,len);for(int h=2;h<=len;h<<=1){Complex wn(cos(-t*2*PI/h),sin(-t*2*PI/h));for(int j=0;j<len;j+=h){Complex E(1,0); //旋转因子for(int k=j;k<j+h/2;++k){Complex u = F[k];Complex v = E*F[k+h/2];F[k] = u+v;F[k+h/2] = u-v;E=E*wn;}}}if(t==-1)   //IDFTfor(int i=0;i<len;++i)F[i].r/=len;
}
void Conv(Complex a[],Complex b[],int len) //求卷积
{FFT(a,len,1);FFT(b,len,1);for(int i=0;i<len;++i) a[i] = a[i]*b[i];FFT(a,len,-1);
}
Complex va[MAXN],vb[MAXN];
int A[MAXN],B[MAXN],n,len;
int AA[MAXN];
void init()
{scanf("%d",&n);for(int i=0;i<n;i++) scanf("%d",&A[i]);for(int i=0;i<n;i++) scanf("%d",&B[i]);for(int i=n;i<2*n;i++) B[i]=B[i-n];for(int i=0;i<n;i++) AA[i]=A[n-i-1];len=1;while(len<2*n) len<<=1;for(int i=0;i<n;i++) va[i]=Complex(AA[i],0);for(int i=n;i<len;i++) va[i]=Complex(0,0);for(int i=0;i<2*n;i++) vb[i]=Complex(B[i],0);for(int i=2*n;i<len;i++) vb[i]=Complex(0,0);
}
void solve()
{init();Conv(va,vb,len);double ans=0;int k;for(int i=n-1;i<=2*n-2;i++){if(va[i].r>ans){ans=va[i].r;k=i;}}k-=n-1;long long a=0,b=0,ab=0;for(int i=0;i<n;i++) a+=(long long)A[i]*A[i];for(int i=0;i<n;i++) b+=(long long)B[i]*B[i];for(int i=0;i<n;i++) ab+=(long long)A[i]*B[i+k];long long res=a+b-2*ab;printf("%lld\n",res);
}
int main()
{int T;int n;scanf("%d",&T);while(T--){solve();}return 0;
}

转载于:https://www.cnblogs.com/wangdongkai/p/5906954.html

hihocoder 1388 Periodic Signal相关推荐

  1. hihocoder #1388 : Periodic Signal NTTFFT

    传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门:  (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但 ...

  2. Periodic Signal

    描述 Profess X is an expert in signal processing. He has a device which can send a particular 1 second ...

  3. (每日一题)2016 北京ICPC网络赛G hihocoder 1388 (中国剩余定理 + NTT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://vjudge.net/problem/HihoCoder-1388 P ...

  4. 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现

    有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS) 这里我再次给出标准公式. 分析式: 其中: 综合式: 这里我必须先声明,关于分析式和综合式前面那个系数1/N ...

  5. 卷积滤波 英文_《信号与系统》专业术语中英文对照表

    <信号与系统>专业术语中英文对照表 第 1 章 绪论 信号 ( signal ) 系统 ( system ) 电压 ( voltage ) 电流 ( current ) 信息 ( info ...

  6. 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟

    2016 ICPC 北京网络赛 A - The Book List 题意:每本书有所属种类,给出原生的存放方式,求按新的方式存放的样子. tags:坑到心态爆炸的题==  直接堆进vector里搞的, ...

  7. 基于matlab的信号合成与分解,基于matlab的信号合成与分解

    基于matlab的信号合成与分解 - I - 摘 要 为了便于进行周期信号的分析与处理,常要把复杂的周期信号进行分解,即将周期 信号分解为正余弦等此类基本信号的线性组合,通过对这些基本信号单元在时域和 ...

  8. 先知模型 facebook_使用Facebook先知进行犯罪率预测

    先知模型 facebook Time series prediction is one of the must-know techniques for any data scientist. Ques ...

  9. Github | 如何用神经网络识别系外行星?

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :Github https: ...

  10. [Hector学习笔记]GNSS时间序列处理软件Hector使用备忘(批处理脚本)

    由Machiel Bos 和Rui Fernandes共同研发的Hector软件可以利用时间相关噪声来估计时间序列线性趋势,是与优秀的GNSS时间序列处理软件之一. 软件安装教程:Hector软件安装 ...

最新文章

  1. Linu基础:磁盘存储和文件管理
  2. Android Jetpack LiveData 源码解析
  3. 静态库与动态库(一):概述
  4. 系统垃圾清理.cmd
  5. js / php 网站底部版权文字自动改变年份
  6. 数据结构与算法之双链表的操作
  7. 第一讲(3)osgearth编译
  8. 由数据库连接池想到的----处理他人未释放的资源
  9. android版 wifi伴侣,wifi伴侣下载|wifi伴侣安卓版2016最新版 3.7.5 - 系统天堂
  10. android开机画面在uboot里吗,iTOP-6818开发板-Android5.1修改uboot和内核开机LOGO
  11. 天津春季高考历年计算机考试卷,最新春季高考历年真题-天津市春季高考语文试卷...
  12. 如何在vue中优雅的使用ocx控件:结合iframe
  13. 【Javaweb】【答卷】萌狼蓝天大二上学期期末Javaweb考试复习卷(一)
  14. Animator组件--culling mode
  15. 基于深度学习的三维重建算法综述
  16. 易点易动助力达达-京东到家打通全集团固定资产数字化管理全链条
  17. CVE-2017-7494紧急预警:Samba蠕虫级提权漏洞,攻击代码已在网上扩散
  18. 利用Python获取某游戏网站热销商品并用pands进行Excel数据存储
  19. 谨慎处理 Service Worker 的更新
  20. Android 仿淘宝京东商品详情页阻力翻页效果

热门文章

  1. 【实物】端到端自动驾驶搭建教程(四)附完整资料
  2. “人生没有一桩幸福不要付代价的。东边占了便宜,西边就得吃亏些。”--《傅雷家书》
  3. 使用xadmin更新数据时,报错expected string or bytes-like object
  4. 给定一个正整数,计算有多少对质数的和等于输入的这个正整数
  5. BZOJ3626 神思路的树链剖分+线段树维护
  6. CPU 用户时间 系统时间
  7. 109.虚函数与析构构造
  8. RandomCodeUtil随机数工具类,随机生成数字、字母、数字字母组合、中文姓名
  9. 推荐一个不错的plist拆解工具,untp
  10. vue轮播插件vue-awesome-swiper