【ZJOI2017 Round2练习&BZOJ4827】D1T3 gift(FFT)
题意:


思路:可以看出题目所要最小化的是这样一个形式:

拆出每一项之后发现会变化的项只有sigma a[i]*b[i+t]与c^2,c*(a[i]-b[i])
c可以在外层枚举,剩下的只有sigma a[i]*b[i+t] (i=0..n-1)
因为FFT只能解决simga a[i]*b[n-i]
所以我们可以把a翻转,这样就化成了如上的形式
c[n+t+1]=a[n-i+1]*b[i+t] (i=0..n-1)
取出最小(大)的c[i],与外层枚举的c共同求出答案,取最小值
FFT模板,值得一背
type cp=record
x,y:extended;
end;
arr=array[..]of cp;
var c,d,cur:arr;
a,b:array[..]of longint;
n,i,m:longint;
ans,sum,s1,s2:int64; procedure swap(var x,y:cp);
var t:cp;
begin
t:=x; x:=y; y:=t;
end; function jia(a,b:cp;f:longint):cp;
begin
if f=- then
begin
b.x:=-b.x; b.y:=-b.y;
end;
jia.x:=a.x+b.x;
jia.y:=a.y+b.y;
end; function mult(a,b:cp):cp;
begin
mult.x:=a.x*b.x-a.y*b.y;
mult.y:=a.x*b.y+a.y*b.x;
end; function min(x,y:int64):int64;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:int64):int64;
begin
if x>y then exit(x);
exit(y);
end; procedure fft(var a:arr;n,f:longint);
var i,j,k,m:longint;
w,u,v:cp;
begin
i:=n>>; j:=;
while j<n do
begin
if i<j then swap(a[i],a[j]);
k:=n>>;
while k and i> do
begin
i:=i xor k;
k:=k>>;
end;
i:=i xor k;
inc(j);
end;
m:=;
while m<=n do
begin
w.x:=cos(*pi*f/m); w.y:=sin(*pi*f/m);
cur[].x:=; cur[].y:=;
for i:= to m- do cur[i]:=mult(cur[i-],w);
i:=;
while i<n do
begin
j:=i;
while j<i+(m>>) do
begin
u:=a[j]; v:=mult(a[j+(m>>)],cur[j-i]);
a[j]:=jia(u,v,);
a[j+(m>>)]:=jia(u,v,-);
inc(j);
end;
i:=i+m;
end;
m:=m<<;
end;
end; procedure solve;
var i,j,len:longint;
begin
for i:= to n- do c[i].x:=a[i];
for i:= to n- do d[i].x:=b[i];
i:=; j:=n-;
while i<=j do
begin
swap(d[i],d[j]);
inc(i); dec(j);
end;
len:=;
while len<=n+n do len:=len<<;
for i:=n to len- do
begin
c[i].x:=; d[i].x:=;
end;
for i:= to len- do
begin
c[i].y:=; d[i].y:=;
end;
fft(c,len,);
fft(d,len,);
for i:= to len- do c[i]:=mult(c[i],d[i]);
fft(c,len,-);
for i:= to len- do c[i].x:=trunc(c[i].x/len+0.5);
for i:=n to len- do c[i mod n].x:=c[i mod n].x+c[i].x;
sum:=-(<<);
for i:= to n- do sum:=max(sum,round(c[i].x));
sum:=-sum*;
end; begin
assign(input,'bzoj4827.in'); reset(input);
assign(output,'bzoj4827.out'); rewrite(output);
readln(n,m);
for i:= to n- do read(a[i]);
for i:= to n- do read(b[i]);
ans:=<<;
solve;
for i:= to n- do
begin
s1:=s1+a[i]-b[i];
s2:=s2+a[i]*a[i]+b[i]*b[i];
end;
for i:=-m to m do ans:=min(ans,int64(n)*i*i+*s1*i+s2+sum);
writeln(ans);
close(input);
close(output);
end.
【ZJOI2017 Round2练习&BZOJ4827】D1T3 gift(FFT)的更多相关文章
- BZOJ4827: [Hnoi2017]礼物(FFT 二次函数)
题意 题目链接 Sol 越来越菜了..裸的FFT写了1h.. 思路比较简单,直接把 \(\sum (x_i - y_i + c)^2\) 拆开 发现能提出一坨东西,然后与c有关的部分是关于C的二次函数 ...
- BZOJ4827:[HNOI2017]礼物(FFT)
Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一 个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在 ...
- 【ZJOI2017 Round2练习】
………………………………………………………………………… DAY1:听说是湖南的题 T1:spaly?毫无想法,写个暴力压压惊 T2:尼克杨问号脸 T3:FFT我不会啊,70points已经尽力了
- 【ZJOI2017 Round2练习&BZOJ4826】D1T2 sf(主席树,单调栈)
题意: 思路:From http://blog.csdn.net/neither_nor/article/details/70211150 对每个点i,单调栈求出左边和右边第一个大于i的位置,记为l[ ...
- 【BZOJ4827】【HNOI2017】礼物(FFT)
[BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...
- BZOJ4827 [Hnoi2017]礼物 多项式 FFT
原文链接http://www.cnblogs.com/zhouzhendong/p/8823962.html 题目传送门 - BZOJ4827 题意 有两个长为$n$的序列$x$和$y$,序列$x,y ...
- [BZOJ4827][Hnoi2017]礼物(FFT)
4827: [Hnoi2017]礼物 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1315 Solved: 915[Submit][Status] ...
- 【bzoj4827】[Hnoi2017]礼物 FFT
题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一个送给她.每个手环上各有 n 个装饰物,并且每个装饰物都有一定的亮度.但是在她生日的前一天 ...
- [AHOI2017/HNOI2017][bzoj4827] 礼物 [FFT]
题面 传送门 思路 首先,有一个结论:两个手环增加非负整数亮度,等于其中一个增加一个整数亮度(可以为负) 我们令增加量为$x$,旋转以后的原数列为${a}{b}$那么现在的费用就是: $\sum_{i ...
随机推荐
- 20道spring boot面试题
面试了少量人,简历上都说自己熟习 Spring Boot, 或者者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望. 下面,我给大家总 ...
- 有关lower_bound()函数的使用
lower_bound()函数需要加载头文件#include<algorithm>,其基本用途是查找有序区间中第一个大于或等于某给定值的元素的位置,其中排序规则可以通过二元关系来表示. 函 ...
- JS数组、数组和学生对象
<html> <head> <meta charset="utf-8"> <title>JS</title> </ ...
- ASP.NET 之页面重定向和传值
在开发 ASP.NET 网站时,经常需要从一个网页重定向(导航)到另一个网页,同时希望能够将信息从源页传递到目标页.例如,如果你正在开发一个保险网站,需要用一个页面来收集基本信息(用户信息.保险产品信 ...
- key-value键值型数据库:Redis
key-value键值型数据库:Redis redis Redis是in-memory型(内存型)的键值数据库,数据在磁盘上是持久的,键类型是字符串,值类型是字符串.字符串集合(Set).sorted ...
- windows 下完全卸载service
用SC Delete命令的话,如果服务名称中带空格,则请在服务名称前面用半角的双引号括起,如SC delete "Adobe LM Service",另外Services这个子键一 ...
- MFC_2.10选项卡控件的封装
选项卡控件的封装 1.新建默认MFC项目 2.添加资源Dialog,属性style改child,边框改none,添加类取名CMyDialog1: 同理,CMyDialog2: 3.类向导,添加MFC类 ...
- RocketMQ学习笔记(14)----RocketMQ的去重策略
1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...
- LR性能分析随笔(一)
一.关键词 吞吐量:对于吞吐量,单位时间内吞吐量越大,说明服务器的处理能力越好:而请求数仅表示客户端向服务器发出的请求数,与吞吐量一般成正比关系. HTTP:HTTP404表示文件或目录没有找到.有些 ...
- webstom2017最新破解 ------------ http://blog.csdn.net/voke_/article/details/76418116
webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/1/23)v3.3 注册时,在打开的License ...