解题:AHOI2017/HNOI2017 礼物
先不管旋转操作,只考虑增加亮度这个操作。显然这个玩意的影响是相对于$x,y$固定的,所以可以枚举增加的亮度然后O(1)算出来。为了方便我们把这个操作换种方法表示,只让一个手环改变$[-m,m]$中的一个亮度$k$。这样把$\sum\limits_{i=1}^n(x_i-y_i+k)^2$拆完以后发现只有$\sum\limits_{i=1}^n 2x_iy_i$这个玩意跟$x,y$的顺序有关,于是先扫一遍把其他的求出来
然后考虑旋转的操作,环上问题有个很经典的操作:断环为链。注意到这里是两个多项式的同一项向答案的同一项做贡献,相当于差值一定,于是就是套路的把一个多项式反过来,然后卷就完事了
#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=;
const double pai=acos(-);
struct cpx
{
double x,y;
}a[N],b[N];
cpx operator + (cpx a,cpx b)
{
return (cpx){a.x+b.x,a.y+b.y};
}
cpx operator - (cpx a,cpx b)
{
return (cpx){a.x-b.x,a.y-b.y};
}
cpx operator * (cpx a,cpx b)
{
double x1=a.x,x2=b.x,y1=a.y,y2=b.y;
return (cpx){x1*x2-y1*y2,x1*y2+x2*y1};
}
double Sin[M],Cos[M];
long long outp,cal,sm1,sm2;
int n,m,nm,rd,rev[N],lgg[N],ans[N];
void read(int &x)
{
x=; char ch=getchar();
while(!isdigit(ch))
ch=getchar();
while(isdigit(ch))
x=(x<<)+(x<<)+(ch^),ch=getchar();
}
void prework()
{
register int i;
read(n),read(m);
for(i=;i<=n;i++)
{
read(rd),sm1+=rd*rd,sm2+=rd;
a[i].x=a[i+n].x=rd;
}
for(i=;i<=n;i++)
{
read(rd),sm1+=rd*rd,sm2-=rd;
b[n-i+].x=rd;
}
cal=outp=1e9,nm=n,m=*n,n=,lgg[]=; while(n<=m) n<<=;
for(i=;i<=n;i++)
lgg[i]=lgg[i>>]+;
for(i=;i<=n;i++)
rev[i]=(rev[i>>]>>)+(i&)*(n>>);
for(i=;i<=;i++)
Sin[i]=sin(*pai/(<<i)),Cos[i]=cos(*pai/(<<i));
}
void transform(cpx *c,int t)
{
register int i,j,k;
for(i=;i<n;i++)
if(rev[i]>i) swap(c[i],c[rev[i]]);
for(i=;i<=n;i<<=)
{
int len=i>>;
cpx omg={Cos[lgg[i]],Sin[lgg[i]]*t};
for(j=;j<n;j+=i)
{
cpx ori={,},tmp;
for(k=j;k<j+len;k++,ori=ori*omg)
tmp=ori*c[k+len],c[k+len]=c[k]-tmp,c[k]=c[k]+tmp;
}
}
}
int main()
{
register int i; prework();
transform(a,),transform(b,);
for(i=;i<n;i++) a[i]=a[i]*b[i];
transform(a,-);
for(i=;i<=*nm;i++) ans[i]=(int)(a[i].x/n+0.5);
for(i=-m;i<=m;i++) cal=min(cal,sm1+1ll*i*i*nm+2ll*sm2*i);
for(i=;i<=nm;i++) outp=min(outp,cal-2ll*ans[i+nm]);
printf("%lld",outp);
return ;
}
解题:AHOI2017/HNOI2017 礼物的更多相关文章
- 【LG3723】[AHOI2017/HNOI2017]礼物
[LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...
- 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告
P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...
- bzoj 4827: [Hnoi2017]礼物 [fft]
4827: [Hnoi2017]礼物 题意:略 以前做的了 化一化式子就是一个卷积和一些常数项 我记着确定调整值还要求一下导... #include <iostream> #include ...
- P3723 [AH2017/HNOI2017]礼物
题目链接:[AH2017/HNOI2017]礼物 题意: 两个环x, y 长度都为n k可取 0 ~ n - 1 c可取任意值 求 ∑ ( x[i] - y[(i + k) % n + 1] ...
- 【BZOJ4827】 [Hnoi2017]礼物
BZOJ4827 [Hnoi2017]礼物 Solution 如果一串数的增加,不就等于另一串数减吗? 那么我们可以把答案写成另一个形式: \(ans=\sum_{i=1}^n(x_i-y_i+C)^ ...
- 4827: [Hnoi2017]礼物
4827: [Hnoi2017]礼物 链接 分析: 求最小的$\sum_{i=1}^{n}(x_i-y_i)^2$ 设旋转了j位,每一位加上了c. $\sum\limits_{i=1}^{n}(x_{ ...
- [BZOJ4827][Hnoi2017]礼物(FFT)
4827: [Hnoi2017]礼物 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1315 Solved: 915[Submit][Status] ...
- [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...
- 笔记-[AH2017/HNOI2017]礼物
笔记-[AH2017/HNOI2017]礼物 [AH2017/HNOI2017]礼物 \[\begin{split} ans_i=&\sum_{j=1}^n(a_j-b_j+i)^2\\ =& ...
随机推荐
- 【LDAP安装】在已编译安装的PHP环境下安装LDAP模块
在已编译安装的PHP环境下安装LDAP模块 (乐维温馨提示:其他模块也能以这个方式安装) 1.在PHP源码包内找到ldap模块文件 cd php-5.6.37 cd ext/ldap/ 2.phpiz ...
- LINUX开发使用的3个远程工具
1,SecureCRT 2,SSH Secure Shell Client 3,VNC Viewer 如果想VNC Server启动时加载vncserver服务 需要修改/etc/rc.d/rc.lo ...
- mkdir命令详情
基础命令学习目录首页 原文链接:https://blog.csdn.net/zwlove5280/article/details/74618041 mkdir 是创建目录的命令. 创建一级目录 mkd ...
- exit命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/itcomputer/p/4157859.html 用途说明 exit命令用于退出当前shell,在shell脚本中可以 ...
- PHP--面向对象的设计原则
三大特性是:封装.继承.多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏. 封装是面向对象的特征之一,是对象和类概念的主要特 ...
- MySQL课堂练习 20162315
练习内容 1.参考教材相关代码,提交能连接到world的截图(有学号水印) 2.查询world数据库,获得人口超过500万的所有城市的列表. 3.查询world数据库,获得New Jersey州所有城 ...
- struts2返回List json
利用struts2-json-plugin 之前一直输出null.... 按网上的配也不行 后来不知道怎么突然可以了 赶紧记录一下 private List<Shop> moneyshop ...
- “吃神么,买神么”的第一个Sprint计划
一.现状 我们这个团队刚接触网络网站的制作,前台后台的链接,数据库链接等还刚刚了解,在制作过程中药边学习边制作. 持着一个尽力做的心. 二.部分需求索引卡 主要的任务是把我们的主页面先大概做出来 三. ...
- vmware_vcenter_api
VMware Vcenter_API 介绍 本文主要通过调用Vcenter_API,获取其中的数据中心,集群,主机,网络,存储,虚拟机信息. 开发语言 python 使用官方sdk pyvmomi 文 ...
- week4f:个人博客作业
8,工作中的照片 9,对方编程习惯总结 宋成鑫(以后简称老宋).老宋,对编程的思想看的比较重,具体什么是编程的思想,我是也不是很清楚.但是,在编程过程中,老宋的一些话给了我启示.这或许就是编程的思想吧 ...