P3723 [AH2017/HNOI2017]礼物
题目链接:[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]礼物的更多相关文章
- 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告
P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...
- [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...
- 洛谷P3723 [AH2017/HNOI2017]礼物(FFT)
传送门 首先,两个数同时增加自然数值相当于只有其中一个数增加(此增加量可以小于0) 我们令$x$为当前的增加量,${a},{b}$分别为旋转后的两个数列,那么$$ans=\sum_{i=1}^n(a_ ...
- 洛谷P3723 [AH2017/HNOI2017]礼物
吴迪说他化学会考上十分钟就想出来了,太神了%%%不过我也十分钟 但是调了一个多小时啊大草 懒得人话翻译了,自己康吧: 我的室友(真的是室友吗?)最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决 ...
- LUOGU P3723 [AH2017/HNOI2017]礼物 (fft)
传送门 解题思路 首先我们设变化量为\(r\),那么最终的答案就可以写成 : \[ ans=min(\sum\limits_{i=1}^n(a_i-b_i+r)^2) \] \[ ans=min(\s ...
- 笔记-[AH2017/HNOI2017]礼物
笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...
- P3723 【[AH2017/HNOI2017]礼物】
被某大佬指出这是多项式板子!? 我们假设我们原始数列是\(a_i, c_i\), 旋转后的数列是\(a_i, b_i\),我们的增加量为x \[\sum_{i = 1}^n(a_i - b_i + x ...
- BZOJ4827:[AH2017/HNOI2017]礼物——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4827 https://www.luogu.org/problemnew/show/P3723 题面 ...
- [AH2017/HNOI2017] 礼物 解题报告 (FFT)
题目链接: https://www.luogu.org/problemnew/show/P3723 题目: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自 ...
随机推荐
- OSS网页上传和断点续传(STSToken篇)
云账号AccessKey拥有所有API访问权限,在客户端不要直接使用,会泄露ak信息,造成安全问题.所以使用STS方式(临时账号权限)给客户端授权. C#版获取STSToken 一.下载阿里SDK(a ...
- [2017BUAA软工助教]团队alpha得分总表
一.累计得分 项目 介绍 采访 贡献分 功能 技术 α例会 α发布 α测试 α展示 α事后 合计 满分 10 10 10 10 10 50 10 10 150 10 280 hotcode5 10 9 ...
- 后台管理系统之系统操作日志开发(Java实现)
一,功能点 实现管理员操作数据的记录.效果如下 二,代码实现 基于注解的Aop日志记录 1.Log实体类 package com.ideal.manage.guest.bean.log; import ...
- js处理ajax返回的json数组
一.json对象和json数组的区别 jsonObject = {} # json对象 jsonArray=[{},{}] # json数组 二.数据处理 前台接收到后台传过来的json数组实际上是一 ...
- Linux 典型应用之服务管理
crontab 定时任务 用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下: minut ...
- Jeecg-Boot Spring Boot
Jeecg-Boot 1.0 发布,企业级快速开发平台 - 开源中国https://www.oschina.net/news/104889/jeecg-boot-1-0-released
- Linux kernel support docker storage driver aufs
How to make docker use aufs in CentOS 7? - Server Faulthttps://serverfault.com/questions/650208/how- ...
- Tomcat v7.0 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
十二月 , :: 下午 org.apache.coyote.http11.AbstractHttp11Processor process 信息: Error parsing HTTP request ...
- 搞站思路 <陆续完善中>
只提供思路经验分享.不提供日站方法....一般站点那里最容易出现问题 入手思路: 主站一般都很安全.一般从二级域名下手 多看看那些大站新出来的测试分站点 猜路径别忘了google 考虑看站点下的rob ...
- laravel中migration 数据迁移
简介 数据库迁移就像是数据库的版本控制,可以让你的团队轻松修改并共享应用程序的数据库结构.迁移通常与 Laravel 的数据库结构生成器配合使用,让你轻松地构建数据库结构.如果你曾经试过让同事手动在数 ...