P3723 [AH2017/HNOI2017]礼物

式子化简

∑i=1n(xi−yj)2\sum_{i = 1} ^{n} (x_i- y_j) ^2\\ i=1∑n​(xi​−yj​)2

我们对第一个手环+c+c+c,相当于(xi+c−yi)2(x_i + c - y_i) ^ 2(xi​+c−yi​)2,对第二个手环+c+c+c相当于(xi−yi−c)2(x_i - y_i - c) ^2(xi​−yi​−c)2

也就是(xi−yj+c)2(x_i - y_j + c) ^2(xi​−yj​+c)2,c∈[−m,m]c \in[-m, m]c∈[−m,m]

接下来我们就是要求
∑i=1n(xi−yi+c)2∑i=1n(xi2+yi2+2c(xi−yi)+c2−2xiyi)\sum_{i = 1} ^{n} (x_i - y_i + c) ^2\\ \sum_{i = 1} ^{n} (x_i ^ 2 + y_i ^ 2 + 2c(x_i - y_i) + c ^ 2 - 2x_iy_i)\\ i=1∑n​(xi​−yi​+c)2i=1∑n​(xi2​+yi2​+2c(xi​−yi​)+c2−2xi​yi​)
除去最后一项,前面的都是定值,无非就是枚举ccc,check一下∑i=1n2c(xi−yi)+c2\sum\limits_{i = 1} ^{n} 2c(x_i - y_i) + c ^ 2i=1∑n​2c(xi​−yi​)+c2的最小值嘛,

但是不难发现这是一个开口向上得二次函数,所以最小值可以直接通过对称轴O(1)O(1)O(1)求得,

所以我们要让∑i=1nxiyi\sum\limits_{i = 1} ^{n}x_i y_ii=1∑n​xi​yi​最大,也就是∑i=1nxiyi+t\sum\limits_{i = 1} ^{n}x_iy_{i + t}i=1∑n​xi​yi+t​最大

我们翻转xxx,得到∑i=1nxn−i+1yi+t\sum\limits_{i = 1} ^{n} x_{n - i + 1} y_{i + t}i=1∑n​xn−i+1​yi+t​最大,这就是一个多项式卷积的形式了

代码

/*Author : lifehappy
*/
#include <bits/stdc++.h>using namespace std;typedef long long ll;const double pi = acos(-1.0);const int N = 1e6 + 10;struct Complex {double r, i;Complex(double _r = 0, double _i = 0) : r(_r), i(_i) {}}a[N], b[N];Complex operator + (const Complex & a, const Complex & b) {return Complex(a.r + b.r, a.i + b.i);
}Complex operator - (const Complex & a, const Complex & b) {return Complex(a.r - b.r, a.i - b.i);
}Complex operator * (const Complex & a, const Complex & b) {return Complex(a.r * b.r - a.i * b.i, a.r * b.i + a.i * b.r);
}int r[N];void fft(Complex * f, int lim, int rev) {for(int i = 0; i < lim; i++) {if(r[i] < i) {swap(f[i], f[r[i]]);}}for(int i = 1; i < lim; i <<= 1) {Complex wn = Complex(cos(pi / i), rev * sin(pi / i));for(int p = i << 1, j = 0; j < lim; j += p) {Complex w = Complex(1, 0);for(int k = 0; k < i; k++, w = w * wn) {Complex x = f[j + k], y = w * f[i + j + k];f[j + k] = x + y, f[i + j + k] = x - y;}}}if(rev == -1) {for(int i = 0; i < lim; i++) {f[i].r /= lim;}}
}void get_r(int lim) {for(int i = 0; i < lim; ++i) {r[i] = (i & 1) * (lim >> 1) + (r[i >> 1] >> 1);}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);ll ans = 0, res = 0;int n, m, lim = 1;scanf("%d %d", &n, &m);for(int i = 1; i <= n; i++) {scanf("%lf", &a[n - i + 1].r); }for(int i = 1; i <= n; i++) {scanf("%lf", &b[i].r);b[i + n]= b[i];}for(int i = 1; i <= n; i++) {ans += a[i].r * a[i].r + b[i].r * b[i].r;res += a[i].r - b[i].r;}ll c1 = floor(res * 1.0 / n), c2 = ceil(res * 1.0 / n);ans += min(n * c1 * c1 - 2 * c1 * res, n * c2 * c2 - 2 * c2 * res);n <<= 2;while(lim < n) lim <<= 1;n >>= 2;get_r(lim);fft(a, lim, 1);fft(b, lim, 1);for(int i = 0; i < lim; i++) {a[i] = a[i] * b[i];}fft(a, lim, -1);res = 0;for(int i = 1; i <= n; i++) {res = max(res, ll(a[i + n].r + 0.5));}printf("%lld\n", ans - 2 * res);return 0;
}

P3723 [AH2017/HNOI2017]礼物(FFT)相关推荐

  1. P3723 [AH2017/HNOI2017]礼物 FFT + 式子化简

    传送门 文章目录 题意: 思路: 题意: 思路: 首先可以知道,我们对某个数组加上一个正数数的操作可以转换成对一个数组加上一个任意数,所以我们设变化量为xxx. 对于∑i=1n(ai−bi)2\sum ...

  2. (每日一题)P3723 [AH2017/HNOI2017]礼物(经典FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.15 多项式 FFT Problem ...

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

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

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

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

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

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

  6. AH2017/HNOI2017 礼物

    P3723 [AH2017/HNOI2017]礼物 题目大意 给两个数列 a a a和 b b b, a a a和 b b b中的数都小于等于 m m m, b b b可以首尾相接地旋转,要选择一个整 ...

  7. bzoj4827: [Hnoi2017]礼物 FFT

    bzoj4827: [Hnoi2017]礼物 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每个手环上各有 n ...

  8. 【bzoj4827】[AH2017/HNOI2017]礼物(FFT)

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

  9. BZOJ 4827 [Hnoi2017]礼物 ——FFT

    题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...

最新文章

  1. 使用树莓派(Raspberry Pi)远程GPIO
  2. (连续)周期信号的傅里叶级数(FS)
  3. Windows下安装Redis及使用Python操作Redis的方法
  4. Java基础:(五)Object通用方法
  5. 阿里云朱照远:AI打开新视界 8K时代已来!
  6. 加密安装Kli Linux
  7. NTFS不利的一面——ADS流文件
  8. 从零开始编写自己的C#框架(11)——创建解决方案
  9. 专家热议智慧城市建设:没有网络安全,一切免谈
  10. 计算机硬件和软件的主要功能,网络技术在计算机软硬件的作用
  11. Python 基于透明元素裁切图片(类似Photoshop)
  12. 解析:为什么设计师选择mac电脑居多?
  13. 平台业务收款分账产品设计 - 退款退分账
  14. Could not write JSON: Infinite recursion (StackOverflowError) (through reference chain:
  15. ra3录像重播工具_设置DO-RA小工具的网络销售渠道
  16. nokogiri 足球比赛数据
  17. keil编译后显示的Program size含义
  18. 蛮力法基本了解及练习
  19. 腾讯安全天御获“零售风向标”《2020中国零售品牌数字化转型白皮书》推荐
  20. 炫酷的动画特效—css3旋转立方球体

热门文章

  1. java openxml 操作 word,openxml word转成xml
  2. 里rust怎么找蓝图_Rust错误处理
  3. idae 安装的插件怎么删掉_X7 IE阻止我安装插件怎么办
  4. python 框架 优化_python+unittest框架第六天unittest之优化测试报告
  5. 战队口号霸气押韵8字_高考励志班级口号霸气押韵大全
  6. 点开那些优秀的硕博士们的朋友圈,他们都有这些特点!
  7. 沙漠上不小心挖了个洞,让这个地狱之门般的巨坑,燃烧了50年
  8. 来自女朋友的灵魂拷问!| 今日最佳
  9. 春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读
  10. nginx php oracle,第8天 ORACLE安装及NGINX整合PHP环境