题意:

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

拆出每一项之后发现会变化的项只有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)的更多相关文章

  1. BZOJ4827: [Hnoi2017]礼物(FFT 二次函数)

    题意 题目链接 Sol 越来越菜了..裸的FFT写了1h.. 思路比较简单,直接把 \(\sum (x_i - y_i + c)^2\) 拆开 发现能提出一坨东西,然后与c有关的部分是关于C的二次函数 ...

  2. BZOJ4827:[HNOI2017]礼物(FFT)

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

  3. 【ZJOI2017 Round2练习】

    ………………………………………………………………………… DAY1:听说是湖南的题 T1:spaly?毫无想法,写个暴力压压惊 T2:尼克杨问号脸 T3:FFT我不会啊,70points已经尽力了

  4. 【ZJOI2017 Round2练习&BZOJ4826】D1T2 sf(主席树,单调栈)

    题意: 思路:From http://blog.csdn.net/neither_nor/article/details/70211150 对每个点i,单调栈求出左边和右边第一个大于i的位置,记为l[ ...

  5. 【BZOJ4827】【HNOI2017】礼物(FFT)

    [BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...

  6. BZOJ4827 [Hnoi2017]礼物 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8823962.html 题目传送门 - BZOJ4827 题意 有两个长为$n$的序列$x$和$y$,序列$x,y ...

  7. [BZOJ4827][Hnoi2017]礼物(FFT)

    4827: [Hnoi2017]礼物 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1315  Solved: 915[Submit][Status] ...

  8. 【bzoj4827】[Hnoi2017]礼物 FFT

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

  9. [AHOI2017/HNOI2017][bzoj4827] 礼物 [FFT]

    题面 传送门 思路 首先,有一个结论:两个手环增加非负整数亮度,等于其中一个增加一个整数亮度(可以为负) 我们令增加量为$x$,旋转以后的原数列为${a}{b}$那么现在的费用就是: $\sum_{i ...

随机推荐

  1. [App Store Connect帮助]四、添加 App 图标、App 预览和屏幕快照(1)App Store 图标、App 预览和屏幕快照概述

    您可以为您的 App Store 产品页提供有关您 App 的 App Store 图标.三个 App 预览和十张屏幕快照. App Store 图标 您必须提供一个 App Store 图标,用于在 ...

  2. GG_DataAccess 数据库访问层使用dapper操作

    3.5.GG_DataAccess 数据库访问层使用dapper操作 和Model实体类同理,tt模板已写好,需要的可加qq群:547765059  自己下载.

  3. c++ strcmp函数

    用法:加头文件 #include <string.h> 功能:比较字符串s1和s2. 一般形式:strcmp(字符串1,字符串2) 返回值: 当s1<s2时,返回值<0 当s1 ...

  4. C#将类对象转换为字典

    主要是实现将类里面 的属性和对应的值转换为字典的键和值. public class RDfsedfw { /// <summary> /// 将匿名类转换为字典 /// </summ ...

  5. hbase优化小结

    目录: 1,背景 2,GC 3,hbase cache 4,compaction 5,其他 1,背景 项目组中,hbase主要用来备份mysql数据库中的表.主要通过接入mysql binlog,经s ...

  6. 【译】x86程序员手册25-7.1任务状态段

    7.1 Task State Segment 任务状态段 All the information the processor needs in order to manage a task is st ...

  7. MySQL 8.*版本 修改root密码

    MySQL .*版本 修改root密码 查看版本:select version() from dual; 1.6. 登录mysql: 登录mysql:(因为之前没设置密码,所以密码为空,不用输入密码, ...

  8. python学习笔记(5)—— tuple 本质探究

    >>> t=(1,2,3,['a','b','c'],4,5) >>> t[3][0]='x' >>> t (1, 2, 3, ['x', 'b' ...

  9. python爬虫(房天下)

    房天下 import requests res = requests.get('http://esf.sz.fang.com/') #res.text from bs4 import Beautifu ...

  10. CAD把一个dwg文件,或者图像文件当着一个背景导入(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_OpenBackgroundFile 把一个dwg文件,或者图像文件当着一个背景导入.详细说明如下: 参数 说明 CString ...