\[推推公式,即求\Sigma^{n}_{i=1} (x_{i+k}-y_i+c)^2最小,c范围为[-m, m]
\]

\[拆开,就是\Sigma x_i^2 + \Sigma y_i^2 + n * c^2 + 2*c*\Sigma(x_{i+k}-y_i) - 2*\Sigma^{n}_{i=1} x_{i+k}y_i
\]

\[即求2*\Sigma^{n}_{i=1} x_{i+k}y_i最大,再枚举c即可
\]

七十分暴力代码(暴力分贼多)

  1. # include <bits/stdc++.h>
  2. # define RG register
  3. # define IL inline
  4. # define Fill(a, b) memset(a, b, sizeof(a))
  5. using namespace std;
  6. typedef long long ll;
  7. const int _(1e5 + 10);
  8. IL ll Read(){
  9. char c = '%'; ll x = 0, z = 1;
  10. for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
  11. for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  12. return x * z;
  13. }
  14. int n, m;
  15. ll sqx, sqy, sx, sy, x[_], y[_], ans = -1e18, mn = 1e18;
  16. int main(RG int argc, RG char *argv[]){
  17. n = Read(); m = Read();
  18. for(RG int i = 1; i <= n; ++i) x[i + n] = x[i] = Read(), sx += x[i], sqx += x[i] * x[i];
  19. for(RG int i = 1; i <= n; ++i) y[i] = Read(), sy += y[i], sqy += y[i] * y[i];
  20. for(RG int i = 0; i < n; ++i){
  21. RG ll cnt = 0;
  22. for(RG int j = 1; j <= n; ++j) cnt += x[j + i] * y[j];
  23. ans = max(ans, cnt);
  24. }
  25. for(RG int c = -m; c <= m; ++c) mn = min(mn, 1LL * n * c * c + 1LL * 2 * c * (sx - sy) - 2 * ans);
  26. printf("%lld\n", mn + sqx + sqy);
  27. return 0;
  28. }

\[\Sigma^{n}_{i=1} x_{i+k}y_i,很套路,就往FFT上靠,把y反转不就变成\Sigma^{n}_{i=1} x_{i+k}y_{n-i+1}
\]

\[这不就是卷积,就是多项式相乘后第n+k+1项的系数,这就可以FFT了
\]


把y反转,再倍长,跑一遍FFT,取有用的中间一段的最大值

再枚举c求解即可


  1. # include <bits/stdc++.h>
  2. # define RG register
  3. # define IL inline
  4. # define Fill(a, b) memset(a, b, sizeof(a))
  5. using namespace std;
  6. typedef long long ll;
  7. const int _(4e5 + 10);
  8. const double Pi(acos(-1));
  9. IL ll Read(){
  10. char c = '%'; ll x = 0, z = 1;
  11. for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
  12. for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  13. return x * z;
  14. }
  15. struct Complex{
  16. double real, image;
  17. IL Complex(){ real = image = 0; }
  18. IL Complex(RG double a, RG double b){ real = a; image = b; }
  19. IL Complex operator +(RG Complex B){ return Complex(real + B.real, image + B.image); }
  20. IL Complex operator -(RG Complex B){ return Complex(real - B.real, image - B.image); }
  21. IL Complex operator *(RG Complex B){ return Complex(real * B.real - image * B.image, real * B.image + image * B.real); }
  22. } A[_], B[_];
  23. int n, m, N, M, l, r[_];
  24. ll sx, sy, sqx, sqy, mx = -1e18, ans = 1e18;
  25. IL void FFT(RG Complex *P, RG int opt){
  26. for(RG int i = 0; i < N; i++) if(i < r[i]) swap(P[i], P[r[i]]);
  27. for(RG int i = 1; i < N; i <<= 1){
  28. RG Complex W(cos(Pi / i), opt * sin(Pi / i));
  29. for(RG int p = i << 1, j = 0; j < N; j += p){
  30. RG Complex w(1, 0);
  31. for(RG int k = 0; k < i; ++k, w = w * W){
  32. RG Complex X = P[k + j], Y = w * P[k + j + i];
  33. P[k + j] = X + Y; P[k + j + i] = X - Y;
  34. }
  35. }
  36. }
  37. }
  38. int main(RG int argc, RG char *argv[]){
  39. n = Read() - 1; m = Read();
  40. for(RG int i = 0; i <= n; ++i) A[i].real = Read(), sx += A[i].real, sqx += A[i].real * A[i].real;
  41. for(RG int i = n; i >= 0; --i) B[i + n + 1].real = B[i].real = Read(), sy += B[i].real, sqy += B[i].real * B[i].real;
  42. for(M = 3 * n, N = 1; N <= M; N <<= 1) ++l;
  43. for(RG int i = 0; i < N; ++i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));
  44. FFT(A, 1); FFT(B, 1);
  45. for(RG int i = 0; i < N; ++i) A[i] = A[i] * B[i];
  46. FFT(A, -1);
  47. for(RG int i = n; i <= 2 * n; ++i) mx = max(mx, (ll)(A[i].real / N + 0.5));
  48. for(RG int c = -m; c <= m; ++c) ans = min(ans, 1LL * (n + 1) * c * c + 1LL * 2 * c * (sx - sy));
  49. printf("%lld\n", ans + sqx + sqy - 2 * mx);
  50. return 0;
  51. }

[AH/HNOI2017]礼物的更多相关文章

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

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

  2. P3723 [AH2017/HNOI2017]礼物

    题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1      c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...

  3. 【BZOJ4827】 [Hnoi2017]礼物

    BZOJ4827 [Hnoi2017]礼物 Solution 如果一串数的增加,不就等于另一串数减吗? 那么我们可以把答案写成另一个形式: \(ans=\sum_{i=1}^n(x_i-y_i+C)^ ...

  4. 4827: [Hnoi2017]礼物

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

  5. 【LG3723】[AHOI2017/HNOI2017]礼物

    [LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...

  6. 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告

    P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...

  7. [BZOJ4827][Hnoi2017]礼物(FFT)

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1315  Solved: 915[Submit][Status] ...

  8. [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)

    题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...

  9. 笔记-[AH2017/HNOI2017]礼物

    笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...

随机推荐

  1. 解决PhpStorm卡顿的问题

    以前的开发一直使用phpstorm.可谓是情有独钟,但是发现随着开发phpStorm逐渐变得卡顿,也试过其他的编译器,但是都感觉没有PhpSrom好用,网上百度了一下,看到不一样的回答.只要修改两个J ...

  2. HTTPS的原理解析

    http://www.cnblogs.com/alisecurity/p/5939336.html 外加文档

  3. CentOS下安装XAMPP详细教程(转)

    [原文]http://blog.csdn.net/hel12he/article/details/49781813 现在PHP的集成运行环境越来越多,个人比较喜欢XAMPP,更新速度快,好用,安装便捷 ...

  4. 华为云照片的爬虫程序更新(python3.6)

    一.背景: 每年终都有一个习惯,就是整理资料进行归档,结果发现手机照片全备份在华为云里,在官网上找了一圈,没找到官方的pc工具用来同步照片. 于是找出上次写的程序,看看能不能爬到数据,然而……果然不好 ...

  5. Shell脚本查看linux系统性能瓶颈(转)

    Shell脚本查看linux系统性能瓶颈(转自:http://blog.51cto.com/lizhenliang/1687612) [root@test ~]# cat show_sys_info. ...

  6. VB 如何调用 c++ DLL?

    ``` ```Class MainWindow 'ByVal 值传递 ByRef 引用传递 'Function 有返回值 Sub 无返回值 'C语言数据类型在VisualBasic中声明为调用时使用的 ...

  7. nyoj1204 魔法少女 线性DP

    d[i][0]表示到达第i层,且在第i层没有使用魔法的最少时间 d[i][1]表示到达第i层,且在第i层使用魔法通过一层 d[i][2]表示到达第i层,且在第i层使用魔法通过两层 状态转移方程: d[ ...

  8. linux中的三个文件时间

    Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time). 后来为了解决atime的性能问题, ...

  9. Docker系统五:Docker仓库

    创建Docker Hub账户 登录和上传镜像到Hub.docker.com docker login //登陆hub.docker.com docker tag ubutun1404-baseimag ...

  10. javascript垃圾收集与性能问题

    一.垃圾收集 JavaScript具有自动垃圾收集功能,也就是说,执行环境会负责管理代码所占用的内存. 不同于C和类C语言,这些语言都需要手动监听内存的使用情况.JavaScript实现了自动管理内存 ...