[AH2017/HNOI2017]礼物

Description

我的室友最近喜欢上了一个可爱的小女生。马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她。每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度。但是在她生日的前一天,我的室友突然发现他好像拿错了一个手环,而且已经没时间去更换它了!他只能使用一种特殊的方法,将其中一个手环中所有装饰物的亮度增加一个相同的自然数 c(即非负整数)。并且由于这个手环是一个圆,可以以任意的角度旋转它,但是由于上面 装饰物的方向是固定的,所以手环不能翻转。需要在经过亮度改造和旋转之后,使得两个手环的差异值最小。在将两个手环旋转且装饰物对齐了之后,从对齐的某个位置开始逆时针方向对装饰物编号 1,2,…,n,其中 n 为每个手环的装饰物个数,第 1 个手环的 i 号位置装饰物亮度为 xi,第 2 个手 环的 i 号位置装饰物亮度为 yi,两个手环之间的差异值为(参见输入输出样例和样例解释): ∑i=1n(xi−yi)2\sum_{i=1}^{n}(x_i-y_i)^2i=1n(xiyi)2麻烦你帮他计算一下,进行调整(亮度改造和旋转),使得两个手环之间的差异值最小, 这个最小值是多少呢?

Input
输入数据的第一行有两个数n, m,代表每条手环的装饰物的数量为n,每个装饰物的初始 亮度小于等于m。
接下来两行,每行各有n个数,分别代表第一条手环和第二条手环上从某个位置开始逆时 针方向上各装饰物的亮度。
1≤n≤50000, 1≤m≤100, 1≤ai≤m

Output
输出一个数,表示两个手环能产生的最小差异值。
注意在将手环改造之后,装饰物的亮度 可以大于 m。

Sample Input
5 6
1 2 3 4 5
6 3 3 4 5
Sample Output
1

【样例解释】
需要将第一个手环的亮度增加1,第一个手环的亮度变为: 2 3 4 5 6 旋转一下第二个手环。对于该样例,是将第二个手环的亮度6 3 3 4 5向左循环移动 2017-04-15 第 6 页,共 6 页 一个位置,使得第二手环的最终的亮度为:3 3 4 5 6。 此时两个手环的亮度差异值为1

solution

虽然题目说只能增加自然数ccc亮度
但是既可以是给第一个环加,也可以是给第二个环加
所以转化为给固定一个环增加ccc亮度,ccc可以是负数

假设枚举AAA环增加的亮度为xxx,考虑最后的结果
∑i=1n(ai+x−bi)2=∑i=1n(ai2+x2+bi2+2aix−2aibi−2bix)\sum_{i=1}^n(a_i+x-b_i)^2=\sum_{i=1}^n(a_i^2+x^2+b_i^2+2a_ix-2a_ib_i-2b_ix)i=1n(ai+xbi)2=i=1n(ai2+x2+bi2+2aix2aibi2bix)=∑i=1nai2+∑i=1nbi2+nx2+2x∑i=1nai−2x∑i=1nbi−2∑i=1naibi=\sum_{i=1}^na_i^2+\sum_{i=1}^nb_i^2+nx^2+2x\sum_{i=1}^na_i-2x\sum_{i=1}^nb_i-2\sum_{i=1}^na_ib_i=i=1nai2+i=1nbi2+nx2+2xi=1nai2xi=1nbi2i=1naibi
发现只有最后一项2∑i=1naibi2\sum_{i=1}^na_ib_i2i=1naibi可以改变
因为环可以旋转,那么对应位的亮度乘积求和可能会不同
所以最大化该项就可以保证差异值最小

h(i)=∑j=0if(i)∗g(i−j)h(i)=\sum_{j=0}^if(i)*g(i-j)h(i)=j=0if(i)g(ij)
AAA环扩倍,反转BBB
使用FFTFFTFFT卷积,这样AAA环的(n,2n](n,2n](n,2n]就是所有可能旋转的情况

code

#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
#define maxn 300005
#define ll long long
struct complex {double x, i;complex(){}complex( double X, double I ) {x = X, i = I;}
}A[maxn], B[maxn], rB[maxn];double pi = acos( -1.0 );complex operator + ( complex a, complex b ) {return complex( a.x + b.x, a.i + b.i );
}complex operator - ( complex a, complex b ) {return complex( a.x - b.x, a.i - b.i );
}complex operator * ( complex a, complex b ) {return complex( a.x * b.x - a.i * b.i, a.x * b.i + a.i * b.x );
}int len = 1;
int r[maxn];void FFT( complex *c, int f ) {for( int i = 0;i < len;i ++ )if( i < r[i] ) swap( c[i], c[r[i]] );for( int i = 1;i < len;i <<= 1 ) {complex omega( cos( pi / i ), f * sin( pi / i ) );for( int j = 0;j < len;j += ( i << 1 ) ) {complex w( 1, 0 );for( int k = 0;k < i;k ++, w = w * omega ) {complex x = c[j + k], y = w * c[j + k + i];c[j + k] = x + y;c[j + k + i] = x - y;}}}
}ll suma1, suma2, sumb1, sumb2;
int n, m;int main() {scanf( "%d %d", &n, &m );for( int i = 1;i <= n;i ++ ) {scanf( "%lf", &A[i].x );A[i + n].x = A[i].x;suma1 += A[i].x;suma2 += A[i].x * A[i].x;}for( int i = 1;i <= n;i ++ ) {scanf( "%lf", &B[i].x );sumb1 += B[i].x;sumb2 += B[i].x * B[i].x;}for( int i = 1;i <= n;i ++ )rB[i].x = B[n - i + 1].x; int l = 0;while( len <= n * 3 ) {len <<= 1;l ++;}for( int i = 0;i < len;i ++ )r[i] = ( r[i >> 1] >> 1 ) | ( ( i & 1 ) << ( l - 1 ) );FFT( A, 1 );FFT( rB, 1 );for( int i = 0;i <= len;i ++ )A[i] = A[i] * rB[i];FFT( A, -1 );for( int i = 0;i <= len;i ++ )A[i].x = ( ll ) ( A[i].x / len + 0.5 );ll ans = 1ll << 60;for( int i = 1;i <= n;i ++ )for( int j = -m;j <= m;j ++ ) //初始的亮度都不超过m 那么就没必要把差x弄得太过火ans = min( ans, suma2 + sumb2 + n * j * j + 2ll * j * ( suma1 - sumb1 ) - 2ll * ( ll ) A[i + n].x );printf( "%lld", ans );return 0;
}
/*
Σ(ai+x-bi)^2=Σai^2+Σbi^2+n*x*x+2*x*(Σai-Σbi)-2*Σai*bi
因为旋转,所以最后一项是不固定的
在枚举x后最大化后面一项
最后的相差就是最小的
考虑卷积
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317694.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NOIP2017洛谷P3953:逛公园(分层图最短路、dp、拓扑)

解析 容易想到dp 先跑一遍最短路把每个点的dis求出来 设计dpu,xdp_{u,x}dpu,x​表示结点u多走了x的方案数 dp按照dis升序排列后&#xff0c;从前到后转移即可 如果有0边&#xff0c;求出只有0边时的拓扑序&#xff0c;作为第二关键字进行排序 关于0环&#xff0c;第一篇题解的…

.NET Core 3.0:System.Data的变化

System.Data虽然不引人关注&#xff0c;但在.NET中&#xff0c;System.Data对于各种关系数据库的连接是非常重要的。System.Data也被称为ADO.NET&#xff0c;其前身是ActiveX Data Objects。System.Data提供了通过的框架&#xff0c;在她的基础上.NET数据驱动应用可以被构建。这…

蓝桥杯国赛 皮亚诺曲线距离

参考博客 题意&#xff1a; 题解&#xff1a; 这个很恶魔 本质好说就是找规律&#xff0c;但是贼难写。。 找了篇题解&#xff0c;做法就是大化小&#xff0c;将大阶化为成小阶&#xff0c;计算出离远点的距离。。。我感觉我是写不出来。。 挺秒的&#xff0c;要推公式估计要…

P3369-[模板]普通平衡树【无旋Treap】

正题 题目链接:https://www.luogu.com.cn/problem/P3369 题目大意 一个空可重集&#xff0c;要求支持 插入一个数xxx删除一个数xxx询问一个数xxx的排名询问排名第xxx的数字询问xxx的前驱询问xxx的后继 1≤n≤105,1≤∣x∣≤1071\leq n\leq 10^5,1\leq |x|\leq 10^71≤n≤105…

[SDOI2015]序列统计 (NTT)

Description 小C有一个集合S&#xff0c;里面的元素都是小于M的非负整数。他用程序编写了一个数列生成器&#xff0c;可以生成一个长度为N的数列&#xff0c;数列中的每个数都属于集合S。小C用这个生成器生成了许多这样的数列。 但是小C有一个问题需要你的帮助&#xff1a;给定…

NOIP2016洛谷P1600:天天爱跑步

文章目录解析sol1:树剖mapsol2&#xff1a;树剖离线sol3&#xff1a;dfs维护树状数组差分解析 个人认为本题比同年的逛公园可做许多 本题的一个关键是&#xff1a;把慢跑者(u,v)(u,v)(u,v)转化为上升路径上满足depxtxdepudep_xt_xdep_udepx​tx​depu​的结点和下降路径上满足…

将 Visual Studio 的代码片段导出到 VS Code

导语和原文作者一样&#xff0c;水弟我现在也是使用 VS Code 和 Rider 作为主力开发工具&#xff0c;尤其是 VS Code 可以跨平台&#xff0c;又有丰富的插件支持和多种编程语言支持。当我从 VS 转移到以 VS Code 的开发过程中&#xff0c;遇到的最大问题就是代码提示的不完善&a…

2020 Jiangsu Collegiate Programming Contest

比赛链接 题号题目难易考点Gym 102875AArray难线段树&#xff0c;欧拉降幂Gym 102875BBuilding BlocksGym 102875CCats签到题贪心&#xff0c;思维Gym 102875DDelete Prime中模拟&#xff0c;暴力Gym 102875EEliminate the VirusGym 102875FFlee from MazeGym 102875GGrid Col…

P3835-[模板]可持久化平衡树【无旋Treap】

正题 题目链接:https://www.luogu.com.cn/problem/P3835 题目大意 一个空可重集&#xff0c;要求支持 插入一个数xxx删除一个数xxx询问一个数xxx的排名询问排名第xxx的数字询问xxx的前驱询问xxx的后继 但是所有操作都是基于某个历史版本 1≤n≤5105,1≤∣x∣≤1091\leq n\l…

洛谷P1450:硬币购物(背包、容斥)

解析 呜呜呜不废啊 我只会跑n遍多重背包 感觉非常神仙的一道题 之所以只是蓝的可能是因为代码实现难度太低了吧 但感觉思想真的很难想到 也可能是我太菜了 容斥相关还是需要加强啊qwq 考虑如果没有硬币个数的限制的情况 显然就是个简单的完全背包了 然而如今有了硬币个数的限…

Maze (FFT+快速幂)

Description 众维拉先后在中土大陆上创造了精灵、人类以及矮人&#xff0c;其中矮人是生性喜好常年居住在地下的洞穴的存在&#xff0c;他们挖掘矿物甚至宝石&#xff0c;甚至用他们的勤劳勇敢智慧在地底下创造出了辉煌宏大的宫殿&#xff0c;错综复杂的迷宫——嗯&#xff0c…

如何基于 Kubernetes 构建完整的 DevOps 流水线

前言关于 DevOps 是一个很大的话题&#xff0c;它可能既涉及到公司的技术文化构建&#xff0c;也包括开发者技术能力的支持&#xff0c;这次技术干货分享主要是侧重于技术方面&#xff0c;就是如何用 Kubernetes 来服务好 DevOps 的流水线。本文从 4 个方面介绍&#xff1a;什么…

C - Cats Gym - 102875C

C - Cats Gym - 102875C 题意&#xff1a; n个猫&#xff0c;猫的身高在1到20之间&#xff0c;现在求这些猫的排列&#xff0c;满足一样高的猫不靠着&#xff0c;且他们之间的最矮的猫不比他们高 输出任意符合条件的排列 题解&#xff1a; 构造题 题目的限制条件决定了&…

CF702F-T-Shirts【FhqTreap】

正题 题目链接:https://www.luogu.com.cn/problem/CF702F 题目大意 有nnn个物品&#xff0c;第iii个价格为cic_ici​&#xff0c;质量为qiq_iqi​。 然后有mmm个询问&#xff0c;假设一个人有viv_ivi​块&#xff0c;他每次会买他能买得起的qiq_iqi​最大的&#xff08;如果…

P3160:局部极小值(容斥、状压)

解析 又是一道我不会的容斥题 qwq 本题的一个关键性质:答案有解时&#xff0c;极小值不超过8个 所以可以对其进行状压 考虑从小到大填数 那么在极小值填完之前&#xff0c;它的八连通必然是不能填的 设计dpi,sdp_{i,s}dpi,s​表示从小到大填了i个数&#xff0c;已经填完的极…

[SNOI2017]遗失的答案 (FWT)

description 小皮球在计算出答案之后&#xff0c;买了一堆皮肤&#xff0c;他心里很开心&#xff0c;但是一不小心&#xff0c;就忘记自己买了哪些皮肤了。 ||| 万幸的是&#xff0c;他还记得他把所有皮肤按照 1∼N 来编号&#xff0c;他买来的那些皮肤的编号&#xff08;他至…

Abp中使用可视化的日志面板

如果你还不了解LogDashboard请看这里 使用logdashboard查看可视化日志。ABP的相关知识不做介绍如果有需要请阅读ABP官方文档ABP是Net下非常优秀的开发框架,在中国很多的项目都正在使用它。现在我们可以使用LogDashboard增强在使用ABP开发中的查看日志能力。下载ABP模板项目打开…

J - Just Multiplicative Inverse Gym - 102875J

J - Just Multiplicative Inverse Gym - 102875J 题目&#xff1a; 题解&#xff1a; 给定一个x&#xff0c;求出F(1,x)F(2,x)…F(x-1,x) 的和除以&#xff08;x-1&#xff09; F(x,p)题目已经给出 我们观察F()含义&#xff0c;再结合本题含义&#xff0c;本题并不是要求F(x,…

P7137-[THUPC2021 初赛]切切糕【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P7137 题目大意 有两个人&#xff0c;有nnn个蛋糕&#xff0c;第iii个蛋糕大小为aia_iai​。 每一次第一个人可以选择一个蛋糕把它切成任意大小的两份&#xff08;一份可以为空&#xff09;。 然后第二个人有mmm次机会优先…

利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务

2019第一篇文章。此文源于前公司在迁移项目到.NET Core的过程中&#xff0c;希望使用Generic Host来管理定时任务程序时&#xff0c;没法部署到Windows服务的问题&#xff0c;而且官方也没给出解决方案&#xff0c;只能关注一下官方issue #809 等他们方解决了。官方文档只提供了…