hihocoder 1388 Periodic Signal
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相关推荐
- hihocoder #1388 : Periodic Signal NTTFFT
传送门:hihocoder #1388 : Periodic Signal 先来几个大牛传送门: (模板) NTT long long 版 解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但 ...
- Periodic Signal
描述 Profess X is an expert in signal processing. He has a device which can send a particular 1 second ...
- (每日一题)2016 北京ICPC网络赛G hihocoder 1388 (中国剩余定理 + NTT)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://vjudge.net/problem/HihoCoder-1388 P ...
- 【 MATLAB 】离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现
有关离散傅里叶级数(DFS)我之前也写过一些博文,例如:离散周期信号的傅里叶级数(DFS) 这里我再次给出标准公式. 分析式: 其中: 综合式: 这里我必须先声明,关于分析式和综合式前面那个系数1/N ...
- 卷积滤波 英文_《信号与系统》专业术语中英文对照表
<信号与系统>专业术语中英文对照表 第 1 章 绪论 信号 ( signal ) 系统 ( system ) 电压 ( voltage ) 电流 ( current ) 信息 ( info ...
- 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟
2016 ICPC 北京网络赛 A - The Book List 题意:每本书有所属种类,给出原生的存放方式,求按新的方式存放的样子. tags:坑到心态爆炸的题== 直接堆进vector里搞的, ...
- 基于matlab的信号合成与分解,基于matlab的信号合成与分解
基于matlab的信号合成与分解 - I - 摘 要 为了便于进行周期信号的分析与处理,常要把复杂的周期信号进行分解,即将周期 信号分解为正余弦等此类基本信号的线性组合,通过对这些基本信号单元在时域和 ...
- 先知模型 facebook_使用Facebook先知进行犯罪率预测
先知模型 facebook Time series prediction is one of the must-know techniques for any data scientist. Ques ...
- Github | 如何用神经网络识别系外行星?
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟 报道 | 公众号 CVLianMeng 转载于 :Github https: ...
- [Hector学习笔记]GNSS时间序列处理软件Hector使用备忘(批处理脚本)
由Machiel Bos 和Rui Fernandes共同研发的Hector软件可以利用时间相关噪声来估计时间序列线性趋势,是与优秀的GNSS时间序列处理软件之一. 软件安装教程:Hector软件安装 ...
最新文章
- Linu基础:磁盘存储和文件管理
- Android Jetpack LiveData 源码解析
- 静态库与动态库(一):概述
- 系统垃圾清理.cmd
- js / php 网站底部版权文字自动改变年份
- 数据结构与算法之双链表的操作
- 第一讲(3)osgearth编译
- 由数据库连接池想到的----处理他人未释放的资源
- android版 wifi伴侣,wifi伴侣下载|wifi伴侣安卓版2016最新版 3.7.5 - 系统天堂
- android开机画面在uboot里吗,iTOP-6818开发板-Android5.1修改uboot和内核开机LOGO
- 天津春季高考历年计算机考试卷,最新春季高考历年真题-天津市春季高考语文试卷...
- 如何在vue中优雅的使用ocx控件:结合iframe
- 【Javaweb】【答卷】萌狼蓝天大二上学期期末Javaweb考试复习卷(一)
- Animator组件--culling mode
- 基于深度学习的三维重建算法综述
- 易点易动助力达达-京东到家打通全集团固定资产数字化管理全链条
- CVE-2017-7494紧急预警:Samba蠕虫级提权漏洞,攻击代码已在网上扩散
- 利用Python获取某游戏网站热销商品并用pands进行Excel数据存储
- 谨慎处理 Service Worker 的更新
- Android 仿淘宝京东商品详情页阻力翻页效果
热门文章
- 【实物】端到端自动驾驶搭建教程(四)附完整资料
- “人生没有一桩幸福不要付代价的。东边占了便宜,西边就得吃亏些。”--《傅雷家书》
- 使用xadmin更新数据时,报错expected string or bytes-like object
- 给定一个正整数,计算有多少对质数的和等于输入的这个正整数
- BZOJ3626 神思路的树链剖分+线段树维护
- CPU 用户时间 系统时间
- 109.虚函数与析构构造
- RandomCodeUtil随机数工具类,随机生成数字、字母、数字字母组合、中文姓名
- 推荐一个不错的plist拆解工具,untp
- vue轮播插件vue-awesome-swiper