一道FFT

然而据说暴力可以水70分

然而我省选的时候看到了直接吓傻了  连暴力都没打

太弱了啊QAQ

emmmm

详细的拆开就看其他题解吧233

最后那一步卷积其实我一直没明白

后来画画图终于懂了

只要把其中一个反过来

多项式乘法的结果中的每一项系数就对应某一个Σx[i] * y[j] 的结果

前面几项是不完全的结果

但是太小了就被忽略啦

代码如下

  1. /**************************************************************
  2. Problem: 4827
  3. User: cminus
  4. Language: C++
  5. Result: Accepted
  6. Time:5644 ms
  7. Memory:24568 kb
  8. ****************************************************************/
  9.  
  10. #include <cstdio>
  11. #include <cmath>
  12. #include <complex>
  13. using namespace std;
  14.  
  15. const int N = ;
  16. typedef long long ll;
  17. typedef complex<double> cp;
  18. const double pi = acos(-1.0);
  19. cp A[N], B[N];
  20.  
  21. void FFT(cp *y, int n, int type) {
  22. if (n == ) return ;
  23. cp l[n >> ], r[n >> ];
  24. for (int i = ; i <= n; i++)
  25. if (i & ) r[i >> ] = y[i];
  26. else l[i >> ] = y[i];
  27. FFT(l, n >> , type); FFT(r, n >> , type);
  28. cp omegan(cos( * pi / n), sin( * pi * type / n)), omega(, );
  29. for (int i = ; i < n >> ; i++) {
  30. y[i] = l[i] + r[i] * omega;
  31. y[i + (n >> )] = l[i] - r[i] * omega;
  32. omega *= omegan;
  33. }
  34. }
  35.  
  36. int main() {
  37. int n, m, ans = , y = ;
  38. scanf("%d %d", &n, &m);
  39. for (int i = ; i < n; i++) {
  40. int x; scanf("%d", &x);
  41. A[n - i - ] = x;
  42. ans += x * x;
  43. }
  44. for (int i = ; i < n; i++) {
  45. int x; scanf("%d", &x);
  46. B[i] = x;
  47. ans += x * x;
  48. y += (int)B[i].real() - A[n - i - ].real();
  49. }
  50. int n1; for (n1 = ; n1 <= n * ; n1 <<= );
  51. for (int i = ; i < n; i++)
  52. B[i + n] = B[i];
  53. FFT(A, n1, ); FFT(B, n1, );
  54. for (int i = ; i <= n1; i++)
  55. A[i] *= B[i];
  56. FFT(A, n1, -);
  57. int temp = , z = (-y) / n;
  58. for (int i = ; i < n; i++) temp = max(temp, (int)(A[i + n - ].real() / n1 + 0.5));
  59. ans -= temp * ;
  60. temp = z * z * n + y * z * ;
  61. z += ; temp = min(temp, z * z * n + y * z * );
  62. z -= ; temp = min(temp, z * z * n + y * z * );
  63. // 有理有据的精度优化
  64. ans += temp;
  65. printf("%d\n", ans);
  66. return ;
  67. }

bzoj 4827: [HNOI2017]礼物 (FFT)的更多相关文章

  1. bzoj 4827: [Hnoi2017]礼物 [fft]

    4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...

  2. bzoj 4827 [Hnoi2017]礼物——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c ...

  3. bzoj 4827 [Hnoi2017] 礼物 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 首先,旋转对应,可以把 b 序列扩展成2倍,则 a 序列对应到的还是一段区间: 再把 ...

  4. BZOJ 4827 [Hnoi2017]礼物 ——FFT

    题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...

  5. bzoj 4827: [Hnoi2017]礼物【FFT】

    记得FFT要开大数组!!开到快MLE的那种!!我这个就是例子TAT,5e5都RE了 在这题上花的时间太多了,还是FFT不太熟练. 首先看70分的n方做法:从0下标开始存,先n--,把a数组倍增,然后枚 ...

  6. 【刷题】BZOJ 4827 [Hnoi2017]礼物

    Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...

  7. BZOJ 4827: [Hnoi2017]礼物 FFT_多项式_卷积

    题解稍后在笔记本中更新 Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r&q ...

  8. BZOJ:4827: [Hnoi2017]礼物

    [问题描述] 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度. 但是在她生日的 ...

  9. 4827: [Hnoi2017]礼物

    4827: [Hnoi2017]礼物 链接 分析: 求最小的$\sum_{i=1}^{n}(x_i-y_i)^2$ 设旋转了j位,每一位加上了c. $\sum\limits_{i=1}^{n}(x_{ ...

随机推荐

  1. Qt Gui 第六章布局管理

    1.QRadioButton之间如何互斥 其中一种方法是将各个QRadioButton控件放在同一个toolbarsLayout或者toolbarsGroupBox即可:如下所示 toolbarsGr ...

  2. java学习笔记之IO编程—File文件操作类

    1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...

  3. 流量难、获客难、增长难?增长黑客思维“解救”B端业务

    随着市场竞争的不断加剧,流量越来越贵.留存与转化越来越难,实现用户和业务的增长并不容易.无论是B2C 还是B2B的企业,都可能遇到增长的挑战.对于营销团队而言,传统的漏斗式营销思维已有些力不从心,需要 ...

  4. 22.01.Cluster

      1. 클러스터링 iris 데이터셋 확인¶ In [2]: from sklearn import cluster from sklearn import datasets iris = dat ...

  5. TD - SimpleTextarea

    html模板 <input dojoType="bootstrap.form.SimpleTextarea" dojoAttachPoint="assetDescr ...

  6. django学习 session保持登录,且登出

    学一点记一点 刚刚进来的时候突然发现,博客园的主页在缩小的时候会发生一些挤压,有点意思 今天刚看了session,感觉之前太迷茫,把问题想得过于复杂了. 我这个是建立在有登录和注册的功能上的演示. 首 ...

  7. mybatis大于等于小于等于的写法

    第一种写法(1): 原符号 < <= > >= & ' " 替换符号 < <= > >= & &apos; " ...

  8. linux上部署springboot应用的脚本

    #!/bin/bash #getProcessId then kill pids=$(ps -ef | grep flashsale| awk '{print $2}') for pid in $pi ...

  9. 修改json数据中key(键值)

    //方法一:修改JSONObject的键 public static JSONObject changeJsonObj(JSONObject jsonObj,Map<String, String ...

  10. tkinter页面卡死

    tkinter界面卡死的解决办法   1.如果点击按钮,运行了一个比较耗时的操作,那么界面会卡死 import tkinter as tk import time def onclick(text, ...