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 题目: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自 ...
随机推荐
- FreeBSD常用操作
导读 最近遇到一些FreeBSD的故障,在这种操作系统上我们平时用的一些命令无法执行,FreeBSD的一些配置文件也和其他很多Linux系统不一样.为了方便以后查阅,我特别整理了这篇文档. 1. 网络 ...
- vscode中php断点调试方法!
一.PHP的代码断点调试 1.打开vscode的首选项设置,添加"php.validate.executablePath": "D:\\newXampp\\php\\ph ...
- Vue之小入门
Vue之小入门 <div id="app">{{ greeting }}</div> <script> let oDiv = document. ...
- 【学习总结】C-翁恺老师-入门-第0周<程序设计与C>
[学习总结]C-翁恺老师-入门-总 1-首先按视频说的下载编辑器 <DevC++> 并一路默认设置: 安装包下载链接 (我有vc6.0不过预感告诉我老师要用类似CS50里那种命令行编辑器? ...
- JSP页面导致tomcat内存溢出一例
今天发现一个奇怪的问题,一个tomcat应用,里面只有一个单纯的jsp页面,而且这个jsp页面没有任何java代码——想用这个jsp页面配合tomcat完成一个性能验证.但是用jmeter压测了几分钟 ...
- npm5踩过的坑!
1. 版本问题导致环境问题 我们第一次npm install时是根据package.json来安装相关依赖的,但是它里面的版本不固定,因此默认会根据最高的版本来安装相关依赖,但是在npm5是根据pac ...
- 浅谈基于Prism的软件系统的架构设计
很早就想写这么一篇文章来对近几年使用Prism框架来设计软件来做一次深入的分析了,但直到最近才开始整理,说到软件系统的设计这里面有太多的学问,只有经过大量的探索才能够设计出好的软件产品,就本人的理解, ...
- Python——Flask框架——数据库
一.数据库框架 Flask-SQLAlchemy (1)安装: pip install flask-sqlalchemy (2)Flask-SQLAlchemy数据库URL 数据库引擎 URL MyS ...
- 解决post、get端中文乱码问题
在web.xml中配置: <filter> <filter-name>CharacterEncodingFilter</filter-name> <filte ...
- MyISAM索引和InnoDB索引的区别
首先你要知道: 无论是Myisam和Innodb引擎,如果在建表的时候没有显示的定义一行主键列的话,他内部都会自动创建一个隐藏的主键索引: 主键索引以外的索引假设称为次索引:首先Myisam和Inno ...