「AH2017/HNOI2017」礼物
题目链接
\(Solution\)
应为我们可以将任意一个数列加上一个非负整数,即可以变为将一个数列加上一个整数(可以为负),我们将这个整数设为\(z\).所以要求的式子的变为:
\]
首先来化简一下式子
\]
\]
我们可以发现不管如何变化\(\sum_{i=1}^{n}x_i^2+\sum_{i=1}^{n}y_i^2\)的值都不会变.
然后再看看\(\sum_{i=1}^{n}z_i^2+2z\sum_{i=1}^{n}(x_i-y_i)\)显然这是一个关于\(z\)的二次函数.最小值可以\(O(1)\)算出但是注意一下\(z\)必须是整数而且可以为负,所以需要将\(-\frac{x_i-y_i}{n}\)向上和向下取整并带入式子取最小值.
所以我们现在只需要算出\(2\sum_{i=1}^{n}x_i*y_i\)的最大值即可.
这个如何去算,将\(y\)变成链,在进行一次\(fft\)在取一个最大值就好了
\(Code\)
#include<bits/stdc++.h>
#define int long long
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
const int N=3000001;
const double pi=3.14159265358979323846;
struct node {
double x,y;
node operator + (node z)const {
return (node){x+z.x,y+z.y};
}
node operator - (node z)const {
return (node){x-z.x,y-z.y};
}
node operator * (node z)const {
return (node){x*z.x-y*z.y,y*z.x+x*z.y};
}
}f[N],g[N];
int r[N],limit=1;
void fft(node *a,int opt){
for(int i=0;i<=limit;i++)
if(i<r[i])
swap(a[i],a[r[i]]);
for(int i=1;i<limit;i<<=1){
node w=(node){cos(pi/i),opt*sin(pi/i)};
for(int j=0;j<limit;j+=i<<1){
node l=(node){1,0};
for(int k=j;k<j+i;k++){
node p=l*a[k+i];
a[k+i]=a[k]-p;
a[k]=a[k]+p;
l=l*w;
}
}
}
}
int a[N],b[N];
main(){
int n=read(),k=read(),l=0,m=n,js=0,ans=0;
for(int i=1;i<=n;i++)
a[i]=f[i].x=read(),f[i+n].x=f[i].x,js+=a[i],ans+=a[i]*a[i];
for(int i=1;i<=n;i++)
b[i]=read(),js-=b[i],ans+=b[i]*b[i];
reverse(b+1,b+n+1);
for(int i=1;i<=n;i++)
g[i].x=b[i];
int A=-floor(js*1.0/n),B=-ceil(js*1.0/n);
ans+=min(A*A*n+2*A*js,B*B*n+2*B*js);
n*=2;
while(limit<=n+m)
limit<<=1,l++;
for(int i=0;i<limit;i++)
r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
fft(f,1),fft(g,1);
for(int i=0;i<=limit;i++)
f[i]=f[i]*g[i];
fft(f,-1);
int maxx=0;
for(int i=m;i<=n+1;i++)
maxx=max((int)(f[i].x/limit+0.5),maxx);
printf("%lld",ans-2*maxx);
}
「AH2017/HNOI2017」礼物的更多相关文章
- loj#2020 「AHOI / HNOI2017」礼物 ntt
loj#2020 「AHOI / HNOI2017」礼物 链接 bzoj没\(letex\),差评 loj luogu 思路 最小化\(\sum\limits_1^n(a_i-b_i)^2\) 设改变 ...
- 「AHOI / HNOI2017」礼物
「AHOI / HNOI2017」礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰 ...
- loj#2020. 「AHOI / HNOI2017」礼物
题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- 「AHOI / HNOI2017」单旋
「AHOI / HNOI2017」单旋 题目链接 H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(splay)是一种数据结构,因为代码好写,功能多,效率高,掌握这种 ...
- 「AHOI / HNOI2017」影魔
「AHOI / HNOI2017」影魔 题目描述 解决这类比较复杂的区间贡献问题关键在于找到计算的对象. 比如这道题,我们计算的对象就是区间中间的最大值. 对于点\(i\),我们找到左边第一个比他大的 ...
- loj #2023. 「AHOI / HNOI2017」抛硬币
#2023. 「AHOI / HNOI2017」抛硬币 题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个 ...
- loj #2021. 「AHOI / HNOI2017」大佬
#2021. 「AHOI / HNOI2017」大佬 题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢 ...
- [LOJ 2022]「AHOI / HNOI2017」队长快跑
[LOJ 2022]「AHOI / HNOI2017」队长快跑 链接 链接 题解 不难看出,除了影响到起点和终点的射线以外,射线的角度没有意义,因为如果一定要从该射线的射出一侧过去,必然会撞到射线 因 ...
随机推荐
- spring cloud zuul 配置(Robbin 和 熔断)
#启动负载均衡的重试机制,默认falsespring.cloud.loadbalancer.retry.enabled=true#Hystrix是否启用超时时间hystrix.command.defa ...
- Java枚举类的serialVersionUID
起因 最近在公司里敲代码的时候偶然间发现以前留下的枚举类实现了Serializable接口,然后写了个serialVersionUID...我以前一直没在枚举类里使用过..觉得有点神奇....于是百度 ...
- ubuntu 18.04 - server版 开机启动脚本
ubuntu 18.04 不再使用 inited 管理系统,改用 systemd systemd 默认读取 /etc/systemd/system 下的文件,该目录下的文件会链接/lib/system ...
- elasticsearch 安装 head插件
head插件 切换到Elasticsearch的安装目录 cd ~/demo/elasticsearch/es1 执行安装命令 [root@localhost es1]# bin/plugin ins ...
- Array.prototype.slice用法详解
slice方法是定义在js数组原型中的方法,用于截取数组的部分元素,具体使用如下: arrayExample.slice(start, end); start为起始元素位置,end为截止元素位置,如: ...
- java算法 第七届 蓝桥杯B组(题+答案) 7.剪邮票
7.剪邮票 (结果填空) 如[图1.jpg], 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连)比如,[图2.jpg],[图3.jpg]中,粉红 ...
- Scala基础:定义变量和逻辑判断语句以及方法和函数
定义变量和逻辑判断语句 package com.zy.scala import scala.collection.immutable object ScalaDemo { def main(args: ...
- 虚拟机安装centos发现inet为127.0.0.1,导致Xshell连接不上
问题如标题所示: 设置网卡开机自动启动: 实质linux是看一个网卡文件的配置,就是/etc/sysconfig/network-scripts/ifcfg-eth0 (这个文件名看你网卡名称而异,具 ...
- 在OpenSSL中添加自定义加密算法
一.简介 本文以添加自定义算法EVP_ssf33为例,介绍在OpenSSL中添加自定义加密算法的方法 二.步骤 1.修改crypto/object/objects.txt,注册算法OID,如下: rs ...
- vim全局替换命令-乾颐堂
语法为 :[addr]s/源字符串/目的字符串/[option] 全局替换命令为::%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. 如:“1,20” :表示从第1行到2 ...