题目链接:戳我

对于题目中给的式子:(大家暂且把\(y_i\)当作\(y_{i+k}\)来看啦qwq)

\(\sum_{i=1}^{n}(x_i-(y_i+c))^2\)

\(=\sum_{i=1}^n x_i-2x_i(y_i+c)+(y_i+c)^2\)

\(=\sum_{i=1}^nx_i^2-2x_iy_i-2x_ic+y_i^2+2y_ic+c^2\)

\(=\sum_{i=1}^{n} x_i^2-\sum_{i=1}^{n} 2x_iy_i-\sum_{i=1}^n2x_ic+\sum_{i=1}^ny_i^2+\sum_{i=1}^n2y_ic+\sum_{i=1}^nc^2\)

现在问题转化成了最大化\(\sum_{i=1}^{n}x_iy_i\)。

然后我们把y反转,我们大概就得到了这样的一个式子:

\(\sum_{i=1}^{n}x_iy_{n-i+1}\)

唔,卷积QAQ

然后设\(f(x)\)​和\(g(x)\)​,\(f(x)\)​的第\(i\)项系数是\(x_i\)​,\(g(x)\)​的第\(i\)项系数是\(y_{n-i+1}\)​,所以\(f(x)∗g(x)\)​的第\(n+1\)项系数就是第一个环的第n个和第二个环的第1个重合的结果(当然,也可以是前者的第1个和后者的第n个重合的结果,大家可以手动画图比对一下(注意是逆时针分布哦qwq)因为他们的次数相加等于n+1),然后以此类推,断环为链,所以倍长g,n+1~2n项的最大值即为所求。(注意f是要补位的,不过为了对答案不造成影响,要全部补零)

因为c很小,所以暴力枚举就行啦!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<complex>
#define MAXN 2000000
#define INF 0x3f3f3f3f
using namespace std;
const double pi=acos(-1.0);
int N,M,l,n,m,ans=INF;
int p1,p2,t1,t2,cur_ans=-INF;
int r[MAXN],s1[MAXN],s2[MAXN],S[MAXN];
complex<double> a[MAXN],b[MAXN];
inline void fft(complex<double> *P,int opt)
{
for(int i=0;i<N;i++)
if(i<r[i])
swap(P[i],P[r[i]]);
for(int i=1;i<N;i<<=1)
{
complex<double> W(cos(pi/i),opt*sin(pi/i));
for(int p=i<<1,j=0;j<N;j+=p)
{
complex<double> w(1,0);
for(int k=0;k<i;k++,w*=W)
{
complex<double> X=P[j+k],Y=w*P[j+k+i];
P[j+k]=X+Y,P[j+k+i]=X-Y;
}
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&s1[i]);
for(int i=1;i<=n;i++) scanf("%d",&s2[i]);
N=n-1,M=2*n-1;
for(int i=0;i<=N;i++) a[i]=s1[i+1];
for(int i=0;i<n;i++) b[i]=s2[n-i];
for(int i=0;i<n;i++) b[i+n]=b[i];
M+=N;
for(N=1;N<=M;N<<=1) l++;
for(int i=0;i<N;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
fft(a,1),fft(b,1);
for(int i=0;i<N;i++) a[i]=a[i]*b[i];
fft(a,-1);
for(int i=0;i<=M;i++) S[i]=(int)(a[i].real()/N+0.5);
for(int i=1;i<=n;i++)
p1+=s1[i]*s1[i],p2+=s2[i]*s2[i],t1+=s1[i],t2+=s2[i];
for(int i=n-1;i<=2*n-1;i++) cur_ans=max(cur_ans,S[i]);
for(int c=-m;c<=m;c++)
{
int ansans=p1+p2+n*c*c+2*c*(t1-t2)-2*cur_ans;
ans=min(ans,ansans);
}
printf("%d\n",ans);
return 0;
}

AHOI/HNOI2017 礼物的更多相关文章

  1. 并不对劲的bzoj4827:loj2020:p3723:[AHOI/HNOI2017]礼物

    题目大意 有两个长度为\(n\)(\(n\leq5*10^4\))的数列\(x_1,x_2,...,x_n\)和\(y_1,y_2,...,y_n\),两个数列里的数都不超过\(m\)(\(m\leq ...

  2. loj#2020 「AHOI / HNOI2017」礼物 ntt

    loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...

  3. 「AHOI / HNOI2017」礼物

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

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

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

  5. 「AHOI / HNOI2017」单旋

    「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种 ...

  6. 「AHOI / HNOI2017」影魔

    「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的 ...

  7. P3723 [AH2017/HNOI2017]礼物

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

  8. 【BZOJ4827】 [Hnoi2017]礼物

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

  9. 4827: [Hnoi2017]礼物

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

随机推荐

  1. Java基础(九)

    综合案例 此前我们已经练习了根据集合当中的字符串对象读写文件,而本综合案例主要练习根据集合当中的自定义对象来读写文件. 场景介绍 很多网络游戏当中都有组队模式,例如魔兽世界.DotA.英雄联盟(LOL ...

  2. HDU 6662 Acesrc and Travel 换根DP,宇宙最傻记录

    #include<bits/stdc++.h> typedef long long ll; using namespace std; const int maxn=1e6+50; cons ...

  3. mongodb 数据操作(2)

    查询 db.student.find({}) 查询db.student.find({name:"李强1"}) 查询   条件查询 db.student.find({sex:&quo ...

  4. Redis安全策略

    1. 开启redis密码认证,并设置高复杂度密码 描述 redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证. redis因查询效率高,auth这种命令每秒能处 ...

  5. Nginx启动错误 Failed to read PID from file /run/nginx.pid 的处理方法

    问题产生原因 因为 nginx 启动需要一点点时间,而 systemd 在 nginx 完成启动前就去读取 pid file 造成读取 pid 失败 解决方法 让 systemd 在执行 ExecSt ...

  6. QuickSort(快排)的JAVA实现

    QuickSort的JAVA实现 这是一篇算法课程的复习笔记 用JAVA对快排又实现了一遍. 先实现的是那个easy版的,每次选的排序轴都是数组的最后一个: package com.algorithm ...

  7. 03 python3常见内置函数

    数学相关 abs(a) : 求取绝对值.abs(-1) max(list) : 求取list最大值.max([1,2,3]) min(list) : 求取list最小值.min([1,2,3]) su ...

  8. Vue的nextTick是什么?

    公司做之前项目的时候,遇到了一些比较困惑的问题,后来研究明白了nextTick的用法. 我们先看两种情况: 第一种: export default { data () { return { msg: ...

  9. golang常见的几种并发模型框架

    原文链接 package main import ( "fmt" "math/rand" "os" "runtime" ...

  10. 使用CXF开发WebService程序的总结(七):Spring+CXF+Mybatis+Mysql共同打造的服务端示例

    通过该demo,可以 熟悉下 spring+cxf+maven+mybatis+mysql等常见后端技术整合 1. 在前面的 父工程 ws_parent 中 添加依赖 由于原来的项目是使用的cxf依赖 ...