题目链接:[AH2017/HNOI2017]礼物

题意:

两个环x, y 长度都为n

k可取 0 ~ n - 1      c可取任意值

求 ∑ ( x[i] - y[(i + k) % n + 1] + c) ^ 2 的最小值

ans[k] = ∑ ( x[i], y[(i + k) % n + 1] ) ^ 2

拆项

发现ans[k] = ∑ x[i] ^ 2 + ∑ y[i] ^ 2  + n * c ^ 2 + 2 * ∑ x[i] * c - 2 * ∑ y[i] * c - 2 * ∑ x[i] * y[(i + k) % n + 1]

然后 就没有然后了

暴力一项一项解 处理出所有的ans 找最小值就行了

∑ x[i] ^ 2 + ∑ y[i] ^ 2

固定的直接算就行

n * c ^ 2 + 2 * ∑ x[i] * c- 2 * ∑ y[i] * c

把这个式子看作是关于c的

动用初中数学二次函数知识算出最小值

- 2 * ∑ x[i] * y[(i + k) % n + 1]

那么这个呢? FFT大法好

这就很板子

然后是代码

 // luogu-judger-enable-o2
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <complex>
using namespace std;
const int N = 3e5 + ;
const double pi = acos(-);
typedef complex<double> cd;
cd a[N], b[N];
double f[N];
int n, m, lim, l, r[N];
int x[N], y[N], sx, sy;
long long ans; inline void init(){
scanf("%d%d", &n, &m);
for(int i = ; i < n; i++){
scanf("%d", &x[i]);
a[i] = x[i], ans += x[i] * x[i], sx += x[i];
}
for(int i = ; i < n; i++){
scanf("%d", &y[i]);
b[i] = y[i], ans += y[i] * y[i], sy += y[i];
} reverse(a, a + n); //翻转a
for(int i = ; i < n; i++) b[i + n] = b[i];
for(lim = ; lim < * n; lim <<= ) l++;//注意是3 * n哦
} inline void cal(){
for(int i = ; i < lim; i++)
r[i] = (r[i >> ] >> ) | ((i & ) << (l - ));
} void fft(cd * c, int type){
for(int i = ; i < lim; i++)
if(i < r[i]) swap(c[i], c[r[i]]);
for(int i = ; i < lim; i <<= ){
cd xx(cos(pi / i), type * sin(pi / i));
for(int j = ; j < lim; j += (i << )){
cd yy(, );
for(int k = ; k < i; k++, yy *= xx){
cd p = c[j + k], q = yy * c[i + j + k];
c[j + k] = p + q;
c[i + j + k] = p - q;
}
}
}
} int main(){
init();
cal();
int as1 = floor(1.0 * (sy - sx) / n), as2 = ceil(1.0 * (sy - sx) / n);
ans += min(n * as1 * as1 + * (sx - sy) * as1, n * as2 * as2 + * (sx - sy) * as2);
fft(a, ); fft(b, );
for(int i = ; i < lim; i++) a[i] *= b[i];
fft(a, -);
for(int i = n - ; i < (n << ) - ; i++)//统计答案 f[n - 1 + i] = ans[i];
f[i] = round(a[i].real() / lim);
ans -= *max_element(f + n - , f + (n << ) - ) * ;
printf("%lld", ans);
return ;
}

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

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

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

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

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

  3. 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)

    传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...

  4. 洛谷P3723 [AH2017/HNOI2017]礼物

    吴迪说他化学会考上十分钟就想出来了,太神了%%%不过我也十分钟 但是调了一个多小时啊大草 懒得人话翻译了,自己康吧: 我的室友(真的是室友吗?)最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决 ...

  5. LUOGU P3723 [AH2017/HNOI2017]礼物 (fft)

    传送门 解题思路 首先我们设变化量为\(r\),那么最终的答案就可以写成 : \[ ans=min(\sum\limits_{i=1}^n(a_i-b_i+r)^2) \] \[ ans=min(\s ...

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

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

  7. P3723 【[AH2017/HNOI2017]礼物】

    被某大佬指出这是多项式板子!? 我们假设我们原始数列是\(a_i, c_i\), 旋转后的数列是\(a_i, b_i\),我们的增加量为x \[\sum_{i = 1}^n(a_i - b_i + x ...

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

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

  9. [AH2017/HNOI2017] 礼物 解题报告 (FFT)

    题目链接: https://www.luogu.org/problemnew/show/P3723 题目: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自 ...

随机推荐

  1. Linux安装Apache常见报错(一)

    启动Apache提示报错:Could not reliably determine the server's fully qualified domain name, using localhost, ...

  2. pip3 升级失败的解决方法!亲测有效

    pip3 --default-timeout=10000 install -U pip 注意:由于防火长城的存在,会导致更新失败,如果你加上--default-timeout=10000  这个就ok ...

  3. <iOS开发>之App上架流程(2017)

    本文主要介绍了App上架流程,以及上架过程中会遇到的一些问题. 一.App上架前的准备. 上架前,需要开发人员有苹果开发者账号,具体请阅读苹果开发者账号注册申请流程.本文是在已经拥有开发者账号的前提下 ...

  4. Jmeter之发送请求入参必须使用编码格式、Jmeter之发送Delete请求可能入参需要使用编码格式

    这里的其中一个属性值必须要先编码再传参才可以,具体可以通过抓包分析观察:

  5. 解决jenkins运行磁盘满的问题

    解决jenkins运行磁盘满的问题 - ling811的专栏 - CSDN博客 https://blog.csdn.net/ling811/article/details/74991899 1.自动丢 ...

  6. oracle服务端安装与配置

    从oracle官网下载oracle服务端的安装包. 下载下来是两个压缩文件,两个压缩文件都解压(缺一不可)到同一目录下,最后会得到一个database文件夹. 双击database文件夹下的setup ...

  7. springmvc通过HttpServletRequest进行参数传递

    @RequestMapping("/itemEdit") public String itemEdit(HttpServletRequest request, Model mode ...

  8. Day1 基础知识

    数据类型,字符编码 二进制: 定义:二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”.当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是 ...

  9. django之路由层

    一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 一 Django中路由的作用 URL配置(URLconf) ...

  10. WPF实现滚动显示的TextBlock

    在我们使用TextBlock进行数据显示时,经常会遇到这样一种情况就是TextBlock的文字内容太多,如果全部显示的话会占据大量的界面,这是我们就会只让其显示一部分,另外的一部分就让其随着时间的推移 ...