[HNOI2017]礼物

题目描述

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

但是在她生日的前一天,我的室友突然发现他好像拿错了一个手环,而且已经没时间去更换它了!他只能使用一种特殊的方法,将其中一个手环中所有装饰物的亮度增加一个相同的自然数 c(即非负整数)。并且由于这个手环是一个圆,可以以任意的角度旋转它,但是由于上面装饰物的方向是固定的,所以手环不能翻转。需要在经过亮度改造和旋转之后,使得两个手环的差异值最小。

在将两个手环旋转且装饰物对齐了之后,从对齐的某个位置开始逆时针方向对装饰物编号1,2,…,n,其中 n 为每个手环的装饰物个数, 第 1 个手环的 i 号位置装饰物亮度为 xi,第 2 个手环的 i 号位置装饰物亮度为 yi,两个手环之间的差异值为(参见输入输出样例和样例解释):

\sum_{i=1}^{n} (x_i-y_i)^2i=1n​​(xi​​yi​​)2​​

麻烦你帮他计算一下,进行调整(亮度改造和旋转),使得两个手环之间的差异值最小,这个最小值是多少呢?

输入输出格式

输入格式:

 

输入数据的第一行有两个数n, m,代表每条手环的装饰物的数量为n,每个装饰物的初始亮度小于等于m。

接下来两行,每行各有n个数,分别代表第一条手环和第二条手环上从某个位置开始逆时针方向上各装饰物的亮度。

 

输出格式:

 

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

可以大于 m。

 

输入输出样例

输入样例#1:
5 6
1 2 3 4 5
6 3 3 4 5
输出样例#1:
1

说明

【样例解释】

需要将第一个手环的亮度增加1,第一个手环的亮度变为: 2 3 4 5 6

旋转一下第二个手环。对于该样例,是将第二个手环的亮度6 3 3 4 5向左循环移动一个位置,使得第二手环的最终的亮度为: 3 3 4 5 6。

此时两个手环的亮度差异值为1

【数据范围】

30%的数据满足n≤500, m≤10;

70%的数据满足n≤5000;

100%的数据满足1≤n≤50000, 1≤m≤100, 1≤ai≤m。

 

题目可以转化为求Σ(xi-yi+d)^2的最小值.yi可以转n.
把这个式子展开,Σxi^2+Σyi^2+n*d^2-Σ2xi*yi+Σxi*d+Σyi*d.可以发现,x,y的二次项为常量,d有关的项为一个二次函数,剩下的就是Σxi*yi.
这个东西有n个不同的值,分别就是第二个数组转n.可以把第二个数组翻转,然后就构造出了卷积,FFT后提取系数即可.
complex时取real()然后取整要加0.5.


 1 #include<set>
 2 #include<map>
 3 #include<queue>
 4 #include<stack>
 5 #include<ctime>
 6 #include<cmath>
 7 #include<string>
 8 #include<vector>
 9 #include<cstdio>
10 #include<cstdlib>
11 #include<cstring>
12 #include<iostream>
13 #include<algorithm>
14 #include<complex>
15 #define LL long long
16 #define maxn 50000*4
17 using namespace std;
18 const double pi=acos(-1);
19 typedef complex<double> C;
20 C A[maxn],B[maxn];
21 int R[maxn],L=0,n,nn,m;
22 LL sumx=0,sumy=0,pfx=0,pfy=0;
23 void FFT(C *k,int f){
24   for(int i=0;i<n;i++) if(i<R[i]) swap(k[i],k[R[i]]);
25   for(int i=1;i<n;i<<=1){
26     C wn(cos(pi/i),f*sin(pi/i));
27     for(int j=0;j<n;j+=(i<<1)){
28       C w(1,0);
29       for(int p=0;p<i;p++,w*=wn){
30     C x=k[j+p],y=w*k[j+p+i];
31     k[j+p]=x+y;k[j+p+i]=x-y;
32       }
33     }
34   }
35   if(f==-1) for(int i=0;i<n;i++) k[i]/=n;
36 }
37 LL jis(LL x){return nn*x*x+2*(sumx-sumy)*x;}
38 void solve(){
39   LL x1=(sumy-sumx)/nn;
40   LL x2=x1+1,x3=x1-1;
41   LL zx=min(jis(x1),min(jis(x2),jis(x3)));
42   LL zd=-999999;
43   for(int i=0;i<nn-1;i++)
44     zd=max(zd,(LL)(A[i].real()+0.5+A[i+nn].real()));
45   zd=max(zd,(LL)(A[nn-1].real()));
46   printf("%lld",pfx+pfy+zx-2*zd);
47 }
48 int main()
49 {
50   int x;
51   scanf("%d%d",&n,&m),nn=n;
52   n--;m=2*n;
53   for(int i=0;i<=n;i++) scanf("%d",&x),A[i]=x,sumx+=x,pfx+=x*x;
54   for(int i=n;i>=0;i--) scanf("%d",&x),B[i]=x,sumy+=x,pfy+=x*x;
55   for(n=1;n<=m;n<<=1) L++;
56   for(int i=0;i<n;i++) R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
57   FFT(A,1);FFT(B,1);
58   for(int i=0;i<n;i++) A[i]*=B[i];
59   FFT(A,-1);
60   solve();
61   return 0;
62 } 

 

转载于:https://www.cnblogs.com/pantakill/p/7282221.html

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

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

相关文章

《ASP.NET Core 6框架揭秘》实例演示[25]:配置与承载环境的应用

与服务注册一样&#xff0c;针对配置的设置同样可以采用三种不同的编程模式。第一种是利用WebApplicationBuilder的Host属性返回的IHostBuilder对象&#xff0c;它可以帮助我们设置面向宿主和应用的配置。IWebHostBuilder接口上面同样提供了一系列用来对配置进行设置的方法&…

oracle的除,Oracle数据库如何去除别名 - daiyan0526的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

本人曾经用Personal OracleDeveloper2000开发了一些程序&#xff0c;当移植到FOR NT的时候发现有些功能出现了出错提示。经研究发现原来是用户没有能正常连接。由于在developer2000连接personal oracle时不需要别名(alias)&#xff0c;直接写入用户名/密码则可。而在OracleFOR …

Java 之 JavaScript (一)

1.JavaScripta.定义&#xff1a;JavaScript是脚本语言&#xff0c;是一种轻量级的编程语言b.实现&#xff1a;①直接通过标签里面的onXX属性驱动js的执行<input type"button" value"测试" οnclick"alert(‘hello‘)">②引入外部js文件——…

Linux日志出现大量kernel: NET: Registered protocol family 36

一台Linux服务器的系统错误日志出现大量的“ kernel: NET: Registered protocol family 36”错误信息&#xff0c;如下所示&#xff1a; Jul 2 05:27:45 xxxxxx kernel: NET: Registered protocol family 36Jul 2 05:27:45 xxxxxx kernel: NET: Unregistered protocol family…

node的模块机制

Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章&#xff0c;可惜对于Node.js的模块机制大都着墨不多。在后续介绍模块的使用之前&#xff0c;我认为有必要深入一下Node.js的模块机制。 CommonJS规范 早在Netscape诞生不久后&#xff0c;JavaScript就一直在探索本地编…

vs使用ado连接oracle,在VS环境下以ADO方式操作Oracle数据库

利用ADO引擎方式访问Oracle数据库的实现方法&#xff1a;定义数据库头文件为CDBOperation.h#pragma once#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF"),rename("LockTypeEnum"…

httpstat:一个检查网站性能的 curl 统计分析工具

httpstat&#xff1a;一个检查网站性能的 curl 统计分析工具httpstat 是一个 Python 脚本&#xff0c;它以美妙妥善的方式反映了 curl 统计分析&#xff0c;它是一个单一脚本&#xff0c;兼容 Python 3 &#xff0c;在用户的系统上不需要安装额外的软件(依赖)。作者&#xff1a…

Unity(创建脚本)

#一、描述 记录第一课时&#xff0c;脚本的创建与使用基本的API #二、学习记录 &#xff08;一&#xff09;创建一个Cube方块 &#xff08;二&#xff09;在cube组件上添加一个脚本&#xff0c;选中cube组件&#xff0c;在屏幕右侧有着cube的组件属性栏&#xff0c;点击AddComp…

关于面试中看到一些问题

最近公司在招聘.NET开发人员&#xff0c;面试了一些人&#xff0c;有一些感悟&#xff0c;分享出来&#xff0c;以供参考。面试的人员中&#xff0c;有一些是三五年的开发人员&#xff1b;也有几个是10年左右的技术负责人&#xff0c;不但自己架构过项目&#xff0c;还有带领导…

jQuery遍历not的用法

从包含所有段落的集合中删除 id 为 "selected" 的段落&#xff1a; $("p").not("#selected") 定义和用法 not() 从匹配元素集合中删除元素。 语法 1 .not(selector) 参数描述selector字符串值&#xff0c;包含用于匹配元素的选择器表达式。语法 …

linux 字符串加入中括号,Linux Shell 基础 -- 总结几种括号、引号的用法

1、双引号 " "双引号常用于包含一组字符串&#xff0c;在双引号中&#xff0c;除了 "$"、""、" (反引号)"有特殊含义外&#xff0c;其余字符(如IFS、换行符、回车符等)没有特殊含义。$ a3$ echo "$a"输出结果为 3&#xff…

设计模式相关

多例模式 转载于:https://www.cnblogs.com/our880tom/p/6392983.html

一个countDown在多线程调度下使用不当的分享

2019独角兽企业重金招聘Python工程师标准>>> 一个countDown在多线程调度下使用不当的分享 1. 诡异的数据抖动 在一个需求开发过程中&#xff0c;由于有多角色需要获取每个角色下的菜单&#xff1b;结果出现了单角色下拉去菜单没问题&#xff0c;多角色情况下只有一个…

我坚持三年了!

阅读本文大概需要5分钟。不知不觉&#xff0c;公众号写作已经持续了3年了。2019年11月底&#xff0c;心血来潮写了第一篇文章&#xff0c;更多是为了复盘过去的一些工作经历。在前几天&#xff0c;读者数突破了16万&#xff0c;虽然这个数字相比那些头部大号而言并不多&#xf…

关于Qt模态框总汇

转载请注明出处&#xff1a;http://www.cnblogs.com/dachen408/p/7285710.html 父窗体为QMainWindow&#xff1b; 当子窗体为&#xff1a; 1.QWidget&#xff0c;需要设置 this->setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog); this->setWindowModality(Qt::Win…

linux脚本打印循环次数,shell脚本编程基础(3)——循环用法

本节索引&#xff1a;一、if、case条件判断二、for、while及until循环三、循环控制语句continue、break、shift及select菜单四、信号捕捉trap在前面的基础编程内容中&#xff0c;我们已经学习了shell脚本的顺序执行及选择执行&#xff0c;通过这两种方式&#xff0c;可以帮我们…

RTSP服务器之————rtsp-server(轻量级RTSP / RTP流媒体服务器)

github&#xff1a;https://github.com/revmischa/rtsp-server 轻量级RTSP / RTP流媒体服务器

EF CORE 7 中的新功能:使用 ExecuteDelete 和 ExecuteUpdate 进行批量操作

原文链接&#xff1a;https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate原文作者&#xff1a;tim_deschryver翻译&#xff1a;沙漠尽头的狼(谷歌翻译加持)Entity Framework 7 包括一些已被要求的流行功能&#…

java 简单json和对象相互转换

2019独角兽企业重金招聘Python工程师标准>>> package Fasterxml; import com.fasterxml.jackson.databind.ObjectMapper; import mode.User; import java.io.StringWriter; import java.util.ArrayList; import java.util.List;/*** maven...**<dependency>* …

畅想动画制作的乐趣

为什么要制作动画&#xff1f; 现在的营销活动&#xff0c;用一个很简单的图片去吸引消费者已经远远不够。想让消费者创造GMV&#xff0c;肯定需要让消费者觉得眼前一亮或是有视觉冲击的东西&#xff0c;或者在动画过程中提供更好的引导部分&#xff0c;比如红包&#xff0c;引…