传送门:hihocoder #1388 : Periodic Signal

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

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

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

  1. /**************************************************************
  2. Problem:
  3. User: youmi
  4. Language: C++
  5. Result: Accepted
  6. Time:
  7. Memory:
  8. ****************************************************************/
  9. //#pragma comment(linker, "/STACK:1024000000,1024000000")
  10. //#include<bits/stdc++.h>
  11. #include <iostream>
  12. #include <cstdio>
  13. #include <cstring>
  14. #include <algorithm>
  15. #include <map>
  16. #include <stack>
  17. #include <set>
  18. #include <sstream>
  19. #include <cmath>
  20. #include <queue>
  21. #include <deque>
  22. #include <string>
  23. #include <vector>
  24. #define zeros(a) memset(a,0,sizeof(a))
  25. #define ones(a) memset(a,-1,sizeof(a))
  26. #define sc(a) scanf("%d",&a)
  27. #define sc2(a,b) scanf("%d%d",&a,&b)
  28. #define sc3(a,b,c) scanf("%d%d%d",&a,&b,&c)
  29. #define scs(a) scanf("%s",a)
  30. #define sclld(a) scanf("%I64d",&a)
  31. #define pt(a) printf("%d\n",a)
  32. #define ptlld(a) printf("%I64d\n",a)
  33. #define rep(i,from,to) for(int i=from;i<=to;i++)
  34. #define irep(i,to,from) for(int i=to;i>=from;i--)
  35. #define Max(a,b) ((a)>(b)?(a):(b))
  36. #define Min(a,b) ((a)<(b)?(a):(b))
  37. #define lson (step<<1)
  38. #define rson (lson+1)
  39. #define eps 1e-6
  40. #define oo 0x3fffffff
  41. #define TEST cout<<"*************************"<<endl
  42. const double pi=*atan(1.0);
  43.  
  44. using namespace std;
  45. typedef long long ll;
  46.  
  47. int n;
  48. const ll P = 50000000001507329LL; //190734863287 * 2 ^ 18 + 1
  49. //const ll P = 1004535809LL; //479 * 2 ^ 21 + 1
  50. //const ll P = 1004535809; // 119 * 2 ^ 23 + 1
  51. const int N = << ;
  52. const int G = ;
  53. int len;
  54. ll A[N],B[N];
  55. long long a[N],b[N],wn[];
  56.  
  57. ll mul(ll x, ll y) {
  58. return (x * y - (ll)(x / (long double)P * y + 1e-) * P + P) % P;
  59. }
  60.  
  61. ll qpow(ll x, ll k, ll p) {
  62. ll ret = ;
  63. while(k) {
  64. if(k & ) ret = mul(ret, x);
  65. k >>= ;
  66. x = mul(x, x);
  67. }
  68. return ret;
  69. }
  70.  
  71. void getwn()
  72. {
  73. for(int i = ; i <= ; ++i)
  74. {
  75. int t = << i;
  76. wn[i] = qpow(G, (P - ) / t, P);
  77. }
  78. }
  79.  
  80. void change(ll *y, int len)
  81. {
  82. for(int i = , j = len / ; i < len - ; ++i)
  83. {
  84. if(i < j) swap(y[i], y[j]);
  85. int k = len / ;
  86. while(j >= k)
  87. {
  88. j -= k;
  89. k /= ;
  90. }
  91. j += k;
  92. }
  93. }
  94.  
  95. void NTT(ll *y, int len, int on)
  96. {
  97. change(y, len);
  98. int id = ;
  99. for(int h = ; h <= len; h <<= )
  100. {
  101. ++id;
  102. for(int j = ; j < len; j += h)
  103. {
  104. ll w = ;
  105. for(int k = j; k < j + h / ; ++k)
  106. {
  107. ll u = y[k];
  108. ll t = mul(y[k+h/], w);
  109. y[k] = u + t;
  110. if(y[k] >= P) y[k] -= P;
  111. y[k+h/] = u - t + P;
  112. if(y[k+h/] >= P) y[k+h/] -= P;
  113. w = mul(w, wn[id]);
  114. }
  115. }
  116. }
  117. if(on == -)
  118. {
  119. for(int i = ; i < len / ; ++i) swap(y[i], y[len-i]);
  120. ll inv = qpow(len, P - , P);
  121. for(int i = ; i < len; ++i)
  122. y[i] = mul(y[i], inv);
  123. }
  124. }
  125. void work()///卷积,点乘,插值
  126. {
  127. NTT(a,len,);
  128. NTT(b,len,);
  129. for(int i=;i<len;i++)
  130. a[i]=mul(a[i],b[i]);
  131. NTT(a,len,-);
  132. }
  133. ll solve()
  134. {
  135. zeros(a);
  136. zeros(b);
  137. rep(i,,n-)
  138. a[i]=A[i];
  139. rep(i,,n-)
  140. b[i]=B[i];
  141. reverse(b,b+n);
  142. work();
  143. ll ans=;
  144. rep(i,,n-)
  145. a[i]+=a[i+n];
  146. rep(i,,n-)
  147. ans=max(ans,*a[i]);
  148. return ans;
  149. }
  150. int main()
  151. {
  152. #ifndef ONLINE_JUDGE
  153. freopen("in.txt","r",stdin);
  154. #endif
  155. int T_T;
  156. scanf("%d",&T_T);
  157. getwn();
  158. for(int kase=;kase<=T_T;kase++)
  159. {
  160. sc(n);
  161. len=;
  162. while(len<=*n)
  163. len<<=;
  164. rep(i,,n-)
  165. cin>>A[i];
  166. rep(i,,n-)
  167. cin>>B[i];
  168. ll temp=;
  169. rep(i,,n-)
  170. temp+=A[i]*A[i];
  171. rep(i,,n-)
  172. temp+=B[i]*B[i];
  173. ll ans=solve();
  174. ans=temp-ans;
  175. cout<<(ans)<<endl;
  176. }
  177. }

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

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

hihocoder #1388 : Periodic Signal NTT&FFT的更多相关文章

  1. hihoCoder 1388 Periodic Signal(FFT)

    [题目链接] http://hihocoder.com/problemset/problem/1388 [题目大意] 给出A数列和B数列,求下图式子: [题解] 我们将多项式拆开,我们可以得到固定项A ...

  2. hihocoder #1388 : Periodic Signal fft

    题目链接: https://hihocoder.com/problemset/problem/1388 Periodic Signal 时间限制:5000ms内存限制:256MB 问题描述 Profe ...

  3. hihocode #1388 : Periodic Signal NTT

    #1388 : Periodic Signal   描述 Profess X is an expert in signal processing. He has a device which can ...

  4. hihoCoder #1388 : Periodic Signal ( 2016 acm 北京网络赛 F题)

    时间限制:5000ms 单点时限:5000ms 内存限制:256MB 描述 Profess X is an expert in signal processing. He has a device w ...

  5. hihoCoder #1388 : Periodic Signal

    NTT (long long 版) #include <algorithm> #include <cstring> #include <string.h> #inc ...

  6. 【hihocoder#1388】Periodic Signal NTT

    题目链接:http://hihocoder.com/problemset/problem/1388?sid=974337 题目大意:找出一个$k$,使得$\sum_{i=0}^{n-1}(A_{i}- ...

  7. hihocoder 1388 &&2016 ACM/ICPC Asia Regional Beijing Online Periodic Signal

    #1388 : Periodic Signal 时间限制:5000ms 单点时限:5000ms 内存限制:256MB 描述 Profess X is an expert in signal proce ...

  8. hihocoder 1388 fft循环矩阵

    #1388 : Periodic Signal 时间限制:5000ms 单点时限:5000ms 内存限制:256MB 描述 Profess X is an expert in signal proce ...

  9. NTT&FFT(快速?变换)

    NTT&FFT 预先知识:无 我觉得我们可以从NTT/FFT讲起? 两个其实本质相同,都是求 多项式乘积 的算法 FFT \((x,y)\)指复数,我们可以不用管它 首先我们构造单位根\(\o ...

随机推荐

  1. NativeScript - JS 构建跨平台的原生 APP

    使用 NativeScript,你可以用现有的 JavaScript 和 CSS 技术来编写 iOS.Android 和 Windows Phone 原生移动应用程序.由原生平台的呈现引擎呈现界面而不 ...

  2. MySQL索引类型 btree索引和hash索引的区别

    来源一 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 ...

  3. 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService... 匹配的导出 VS2012报错

    刚安装完VS2012,打开VS2012新建项目,但是并没有像之前那样顺利的创建页面,而是弹出了一个错误窗口. 我的系统是win7旗舰版 64位 ,同时安装了VS2010和VS2012.然后我又试了一下 ...

  4. Egret白鹭H5小游戏开发入门(三)

    前言: 在上一篇文章中着重介绍了H5小游戏开发的起步阶段,如Wing面板的使用,素材的处理,类的说明等等,那么今天主要是涉及到场景的创建,loading的修改等等的代码编写. 对于这一节,我在讲解的过 ...

  5. FM四舍五入_从小数点最后一位进位

    原贴地址:http://jiahongguang12.blog.163.com/blog/static/334665720071060551591/ 输入参数12.5445,因此FM从小数点最后一位进 ...

  6. 无线安全审计工具 Fern WiFi Cracker

    使用这款工具前最好自定义一个MAC地址,以便隐藏我们的真实MAC地址信息. 由于Fern WiFi Cracker是图形界面的,不需要敲命令,所以操作起来比Aircrack-ng简单了许多. 首先选择 ...

  7. Android Handler机制(一)---Message源码分析

    Message: 定义: public final class Message implements Parcelable Message类是个final类,就是说不能被继承,同时Message类实现 ...

  8. jquery非空验证功能

    <script type="text/javascript">                $(function(){          /************* ...

  9. 找window的三种方法

    LoginViewController * loginVC = [[LoginViewController alloc]init]; 找window的三种方式 1.// UIWindow * wind ...

  10. 关于Linux与windows传递文件乱码问题

    linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...