题解

二项式展开,然后暴力FFT就好了。会发现有一个卷积与c无关,我们找一个最小的项就行了。

Tips:记得要倍长其中一个数组,防止FFT出锅

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn = 5e4+10;
  5. const double pi = acos(-1.0);
  6. struct Complex{
  7. double r,i;
  8. Complex(double r,double i):r(r),i(i){}
  9. Complex(){}
  10. } A[maxn<<4],B[maxn<<4];
  11. Complex operator + (Complex a,Complex b) {
  12. return Complex(a.r+b.r,a.i+b.i);
  13. }
  14. Complex operator - (Complex a,Complex b) {
  15. return Complex(a.r-b.r,a.i-b.i);
  16. }
  17. Complex operator * (Complex a,Complex b) {
  18. return Complex(a.r*b.r-a.i*b.i,a.r*b.i+a.i*b.r);
  19. }
  20. void operator *= (Complex &a,Complex b) {
  21. a=a*b;
  22. }
  23. void fft(Complex *a,int n,int inv) {
  24. for(int i = 1,j=n>>1;i<n-1;++i) {
  25. if(i<j) swap(a[i],a[j]);
  26. int k = n>>1;
  27. while(j>=k) j-=k,k>>=1;
  28. j+=k;
  29. }
  30. for(int j = 2;j<=n;j<<=1) {
  31. Complex wn(cos(2*pi/j*inv),sin(2*pi/j*inv));
  32. for(int i = 0;i<n;i+=j) {
  33. Complex w(1,0);
  34. for(int k = i;k<i+(j>>1);++k) {
  35. Complex u(a[k]),t(a[k+(j>>1)]*w);
  36. a[k]=u+t;
  37. a[k+(j>>1)]=u-t;
  38. w*=wn;
  39. }
  40. }
  41. }
  42. if(inv == -1)
  43. for(int i = 0;i<n;++i) a[i].r/=n;
  44. }
  45. int n,m;
  46. int a[maxn],b[maxn];
  47. ll aa,bb,sa,sb;
  48. int main() {
  49. ios::sync_with_stdio(false);
  50. cin.tie(0);cout.tie(0);
  51. cin>>n>>m;
  52. for(int i = 0;i<n;++i) cin>>a[i];
  53. for(int i = 0;i<n;++i) cin>>b[i];
  54. for(int i = 0;i<n;++i) {
  55. aa+=a[i]*a[i];
  56. bb+=b[i]*b[i];
  57. sa+=a[i];
  58. sb+=b[i];
  59. }
  60. for(int i = 0;i<n;++i) A[n-i].r=a[i],B[i].r=B[i+n].r=b[i];
  61. int lmt = 1;
  62. while(lmt<=2*n) lmt<<=1;
  63. fft(A,lmt,1);fft(B,lmt,1);
  64. for(int i = 0;i<lmt;++i) A[i]*=B[i];
  65. fft(A,lmt,-1);
  66. ll mn = 0;
  67. for(int i = 0;i<2*n;++i) {
  68. mn = max(mn , (ll)(A[i].r+0.5));
  69. }
  70. ll ans = 10000000000000000LL;
  71. for(int c = -m;c<=m;++c) {
  72. ll cc = 1LL*n*c*c;
  73. ans = min(ans , aa+bb+cc+2LL*sa*c-2LL*sb*c-2LL*mn);
  74. }
  75. cout<<ans<<endl;
  76. return 0;
  77. }

【文文殿下】[AH2017/HNOI2017]礼物的更多相关文章

  1. P3723 [AH2017/HNOI2017]礼物

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

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

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

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

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

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

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

  5. [AH2017/HNOI2017]礼物(FFT)

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

  6. [AH2017/HNOI2017]礼物

    题解: 水题 化简一波式子会发现就是个二次函数再加上一个常数 而只有常数中的-2sigma(xiyi)是随移动而变化的 所以只要o(1)求出二次函数最大值然后搞出sigma(xiyi)就可以了 这个东 ...

  7. BZOJ4827:[AH2017/HNOI2017]礼物——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4827 https://www.luogu.org/problemnew/show/P3723 题面 ...

  8. Luogu 3723 [AH2017/HNOI2017]礼物

    BZOJ 4827 $$\sum_{i = 1}^{n}(x_i - y_i + c)^2 = \sum_{i = 1}^{n}(x_i^2 + y_i^2 + c^2 - 2 * x_iy_i + ...

  9. 【[AH2017/HNOI2017]礼物】

    题目 又是我不会做的题了 看看柿子吧 \[\sum(a_i+c-b_i)^2\] 最小化这个柿子 之所以不写下标是因为我们这个\(\{a\},\{b\}\)可以循环同构 那就开始化吧 \[\sum(a ...

随机推荐

  1. SQL 创建联合主键Table

    CREATE TABLE [User_Instance]( [IntanceID] [int] NOT NULL, ) NOT NULL ) ON [PRIMARY] GO SET ANSI_PADD ...

  2. IDEA导入MySQL包

    点击[Project Structure] 点击[Modules]   在点击下面的界面   找到自己下载的MySQL包就OK了  

  3. oracle merge into语法

    oracle的merge into语法,在这种情况下: 基于某些字段,存在就更新,不存在就插入 不需要先去判断一下记录是否存在,直接使用merge into oerge into 语法: MERGE ...

  4. 733. Flood Fill

    class Solution { public: int szx,szy; vector<vector<int>> floodFill(vector<vector< ...

  5. 2019.01.01洛谷 P4725/P4726 多项式对数/指数函数(牛顿迭代)

    4725传送门 4726传送门 解析 代码: #include<bits/stdc++.h> #define ri register int using namespace std; in ...

  6. 2018.11.03 NOIP模拟 图(bfs/最短路)

    传送门 显然如果AAA到BBB或者CCC到DDD走的不是最短路一定是有一段路径重合了,于是可以O(n2)bfsO(n^2)bfsO(n2)bfs出两点之间的最短距离然后枚举两个点作为重合的端点来更新答 ...

  7. ajax from 提交

    $.ajax({                 cache: true,                 type: "POST",                 url:aj ...

  8. DDR II中的延时参数

     CL (CAS latency) CL是从读命令发出到有效数据到DDR端口的延时,以时钟为单位.下图分别表示CL = 3和CL = 4的两种情况, 如果读命令在第n个时钟周期发出,CL = m,则读 ...

  9. (转)可伸缩性最佳实践:来自eBay的经验

    转自:http://www.infoq.com/cn/articles/ebay-scalability-best-practices 在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力.我们所做的 ...

  10. (动态规划)Max Sum Plus Plus--hdu--1024

    http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Othe ...