传送门:hihocoder #1388 : Periodic Signal

先来几个大牛传送门:  (模板) NTT long long 版

解法一:因为我们知道FFT会精度不够,所以坚持用NTT,但是模数不够大,然后就一直GG,看来我们的搜索姿势也有问题,居然没有搜到上面大神的板子,真的是GG

http://www.cnblogs.com/WABoss/p/5903927.html

/**************************************************************Problem:User: youmiLanguage: C++Result: AcceptedTime:Memory:
****************************************************************/
//#pragma comment(linker, "/STACK:1024000000,1024000000")
//#include<bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#include <cmath>
#include <queue>
#include <deque>
#include <string>
#include <vector>
#define zeros(a) memset(a,0,sizeof(a))
#define ones(a) memset(a,-1,sizeof(a))
#define sc(a) scanf("%d",&a)
#define sc2(a,b) scanf("%d%d",&a,&b)
#define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define scs(a) scanf("%s",a)
#define sclld(a) scanf("%I64d",&a)
#define pt(a) printf("%d\n",a)
#define ptlld(a) printf("%I64d\n",a)
#define rep(i,from,to) for(int i=from;i<=to;i++)
#define irep(i,to,from) for(int i=to;i>=from;i--)
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define lson (step<<1)
#define rson (lson+1)
#define eps 1e-6
#define oo 0x3fffffff
#define TEST cout<<"*************************"<<endl
const double pi=4*atan(1.0);using namespace std;
typedef long long ll;int n;
const ll P = 50000000001507329LL; //190734863287 * 2 ^ 18 + 1
//const ll P = 1004535809LL; //479 * 2 ^ 21 + 1
//const ll P = 1004535809; // 119 * 2 ^ 23 + 1
const int N = 1 << 18;
const int G = 3;
int len;
ll A[N],B[N];
long long a[N],b[N],wn[30];ll mul(ll x, ll y) {return (x * y - (ll)(x / (long double)P * y + 1e-3) * P + P) % P;
}ll qpow(ll x, ll k, ll p) {ll ret = 1;while(k) {if(k & 1) ret = mul(ret, x);k >>= 1;x = mul(x, x);}return ret;
}void getwn()
{for(int i = 1; i <= 18; ++i){int t = 1 << i;wn[i] = qpow(G, (P - 1) / t, P);}
}void change(ll *y, int len)
{for(int i = 1, j = len / 2; i < len - 1; ++i){if(i < j) swap(y[i], y[j]);int k = len / 2;while(j >= k){j -= k;k /= 2;}j += k;}
}void NTT(ll *y, int len, int on)
{change(y, len);int id = 0;for(int h = 2; h <= len; h <<= 1){++id;for(int j = 0; j < len; j += h){ll w = 1;for(int k = j; k < j + h / 2; ++k){ll u = y[k];ll t = mul(y[k+h/2], w);y[k] = u + t;if(y[k] >= P) y[k] -= P;y[k+h/2] = u - t + P;if(y[k+h/2] >= P) y[k+h/2] -= P;w = mul(w, wn[id]);}}}if(on == -1){for(int i = 1; i < len / 2; ++i) swap(y[i], y[len-i]);ll inv = qpow(len, P - 2, P);for(int i = 0; i < len; ++i)y[i] = mul(y[i], inv);}
}
void work()///卷积,点乘,插值
{NTT(a,len,1);NTT(b,len,1);for(int i=0;i<len;i++)a[i]=mul(a[i],b[i]);NTT(a,len,-1);
}
ll solve()
{zeros(a);zeros(b);rep(i,0,n-1)a[i]=A[i];rep(i,0,n-1)b[i]=B[i];reverse(b,b+n);work();ll ans=0;rep(i,0,n-1)a[i]+=a[i+n];rep(i,0,n-1)ans=max(ans,2*a[i]);return ans;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endifint T_T;scanf("%d",&T_T);getwn();for(int kase=1;kase<=T_T;kase++){sc(n);len=1;while(len<=2*n)len<<=1;rep(i,0,n-1)cin>>A[i];rep(i,0,n-1)cin>>B[i];ll temp=0;rep(i,0,n-1)temp+=A[i]*A[i];rep(i,0,n-1)temp+=B[i]*B[i];ll ans=solve();ans=temp-ans;cout<<(ans)<<endl;}
}

View Code

解法二:这个解法确实很漂亮,比赛的时候一直徘徊找一个更大的 模数,然后就GG了,http://www.cnblogs.com/smartweed/p/5903838.html

解法三:其实这种解法我们也尝试了,队友说NTT搞了那么久,说明暴力应该可以,不过最后只剩几分钟来不及找到合适的循环次数,http://www.cnblogs.com/cshg/p/5905398.html

转载于:https://www.cnblogs.com/youmi/p/5905679.html

hihocoder #1388 : Periodic Signal NTTFFT相关推荐

  1. Periodic Signal

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Grafana常用的监控
  2. 面试:说说你对 HashMap 的认识?
  3. Centos Openldap服务器数据库主备(二)
  4. git 快速入门笔记
  5. Oracle入门(十二F)之表分区
  6. 【如意影视】运营级+完整类库+解析线路+无限增加或删减解析接口+如意可视化播放器1.1
  7. php 读写远程文件内容,php获取远程文件内容的函数
  8. hibernate中cascade和inverse中的设置问题
  9. javascript --关灯游戏
  10. hive desc table_name commet乱码问题解决
  11. java 夏令时标志_Java里面的夏令时 | 学步园
  12. PS3主机今日发售 附官方问答
  13. python终端会话是指什么_进程组、会话、控制终端的概念及程序
  14. Python|美国婴儿姓名分析
  15. “一学就会,一做就废”——微服务的架构模式:一个服务一个数据库模式(中)
  16. Python编程练习1
  17. 总在说双亲委派,但双亲委派是什么,双亲委派和类加载的关系,简单讲解
  18. 用django开发一个报修系统
  19. 数据库各种锁的简单理解(转自口渴的火麒麟)
  20. Windows远程桌面连线显示请稍后

热门文章

  1. 前端生产方式:过去 10 年回顾和未来 10 年展望
  2. Java经典面试题整理及答案详解(四)
  3. 克隆人不只出现在科幻电影里?阿里虚拟美女“俪知”亮相
  4. 阿里妈妈基于TensorFlow做了哪些深度优化?TensorFlowRS架构解析
  5. 2018年科技将怎样改变世界?阿里12位科学家发布年度科技趋势预测
  6. 单人制作游戏手册之四:独立游戏怎么预估收益
  7. 游戏中的物理与数学(一):物体运动算法的实现
  8. Java高级工程师实战经验图谱
  9. MySQL性能优化之char、varchar、text的区别
  10. GoldenGate故障处理-表空间不足