HNOI2017礼物
礼物
- 这估计是最水,最无脑的一道题了
- 首先发现总和最接近时答案最小
- 发现答案就是\((\sum_{i=1}^{n}a[i]^2+b[i]^2)-2*max(\sum_{i=1}^{n}a[i]*b[i+j])(0<=j<=n-1)\)
- 前面随便算,主要是后面那个式子,其实就是两个数列错位相乘加起来最大值
- 把\(b\)反过来就变成\(\sum_{i=1}^{n}a[i]*b[n-i-j])(0<=j<=n-1)\),直接就多项式卷积,FFT一算就行了。
// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
typedef int sign;
typedef long long ll;
#define For(i,a,b) for(register sign i=(sign)a;i<=(sign)b;++i)
#define Fordown(i,a,b) for(register sign i=(sign)a;i>=(sign)b;--i)
const int N=5e4+5;
bool cmax(ll &a,ll b){return (a<b)?a=b,1:0;}
bool cmin(ll &a,ll b){return (a>b)?a=b,1:0;}
template<typename T>inline T read()
{
T f=1,ans=0;
char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch-'0'),ch=getchar();
return ans*f;
}
template<typename T>inline void write(T x,char y)
{
if(x==0)
{
putchar('0');putchar(y);
return;
}
if(x<0)
{
putchar('-');
x=-x;
}
static char wr[20];
int top=0;
for(;x;x/=10)wr[++top]=x%10+'0';
while(top)putchar(wr[top--]);
putchar(y);
}
void file()
{
#ifndef ONLINE_JUDGE
freopen("3723.in","r",stdin);
freopen("3723.out","w",stdout);
#endif
}
struct comp
{
double r,v;
comp operator + (const comp &x) const {return (comp){r+x.r,v+x.v};}
comp operator - (const comp &x) const {return (comp){r-x.r,v-x.v};}
comp operator * (const comp &x) const {return (comp){r*x.r-v*x.v,r*x.v+v*x.r};}
};
comp a[N<<2],b[N<<2];
int m,n,t;
int rev[N<<2];
int sum1,sum2;
void input()
{
n=read<int>();t=read<int>();m=n-1;
For(i,0,m)a[i].r=read<int>(),sum1+=a[i].r;
For(i,0,m)b[m-i].r=read<int>(),sum2+=b[m-i].r;
}
void init()
{
if(sum1>sum2)swap(a,b),swap(sum1,sum2);
int temp=(sum2-sum1)/n;
if(sum1+(temp+1)*n-sum2<sum2-sum1-temp*n)temp++;
For(i,0,m)a[i].r+=temp;
m<<=1;
int cnt=0;
for(n=1;n<=m;n<<=1)cnt++;
for(int i=0;i<n;i++)rev[i]=(rev[i>>1]>>1)|((i&1)*(1<<(cnt-1)));
}
const double pi=acos(-1.0);
ll ans;
void FFT(comp *p,int type)
{
int i,j,k,num;
for(i=0;i<n;i++)if(i<rev[i])swap(p[i],p[rev[i]]);
for(i=2;i<=n;i<<=1)
{
comp wi={cos(pi*2/i),sin(pi*2/i)*type};
num=i>>1;
for(j=0;j<n;j+=i)
{
comp x={1,0};
for(k=0;k<num;k++,x=x*wi)
{
comp u=p[j+k],v=p[j+k+num]*x;
p[j+k]=u+v;
p[j+k+num]=u-v;
}
}
}
}
int w[N<<2];
void work()
{
//For(i,0,m>>1)write((int)a[i].r,i==m/2?'\n':' ');
//For(i,0,m>>1)write((int)b[i].r,i==m/2?'\n':' ');
ll res=0;
For(i,0,m>>1)ans+=a[i].r*a[i].r+b[i].r*b[i].r;
FFT(a,1);FFT(b,1);
for(int i=0;i<n;i++)a[i]=a[i]*b[i];
FFT(a,-1);
for(int i=0;i<n;i++)w[i]=(int)(a[i].r/n+0.5);
m>>=1;
For(i,0,m-1)cmax(res,w[i]+w[i+m+1]);
write(ans-res*2,'\n');
}
int main()
{
file();
input();
init();
work();
return 0;
}
HNOI2017礼物的更多相关文章
- 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_{ ...
- 【LG3723】[AHOI2017/HNOI2017]礼物
[LG3723][AHOI2017/HNOI2017]礼物 题面 洛谷 题解 首先我们将\(c\)看作一个可以为负的整数,那么我们就可以省去讨论在哪个手环加\(c\)的繁琐步骤了 设我们当前已经选好了 ...
- 洛谷 P3723 [AH2017/HNOI2017]礼物 解题报告
P3723 [AH2017/HNOI2017]礼物 题目描述 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自己,一个送给她.每个手环上各有 \(n\) 个 ...
- [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\\ =& ...
- [bzoj4827][Hnoi2017]礼物_FFT
礼物 bzoj-4827 Hnoi-2017 题目大意:给定两个长度为$n$的手环,第一个手环上的$n$个权值为$x_i$,第二个为$y_i$.现在我可以同时将所有的$x_i$同时加上自然数$c$.我 ...
随机推荐
- Codechef TAPAIR Counting the important pairs 随机化、树上差分
传送门 题意:给出一个$N$个点.$M$条边的无向连通图,求有多少组无序数对$(i,j)$满足:割掉第$i$条边与第$j$条边之后,图变为不连通.$N \leq 10^5 , M \leq 3 \ti ...
- Nowcoder 牛客练习赛23
Preface 终于知道YKH他们为什么那么喜欢打牛客网了原来可以抽衣服 那天晚上有空就也去玩了下,刷了一波水TM的YKH就抽到了,我当然是没有了 题目偏水,好像都是1A的.才打了一个半小时,回家就直 ...
- dotnetcore/CAP
CAP带你轻松玩转Asp.Net Core消息队列 CAP是什么? CAP是由我们园子里的杨晓东大神开发出来的一套分布式事务的决绝方案,是.Net Core Community中的第一个千星项目(目前 ...
- REST-framework快速构建API--生成Swagger接口文档
一.Swagger概述 1.引言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档使用Word编写,or一些接口文档管理平台进行编写,但此类接口文档维护更新比较麻烦,每次接口有变更,需要手动修改 ...
- 路由嵌套 active
http://www.jb51.net/article/102574.htm; https://segmentfault.com/q/1010000008950255 <el-menu :def ...
- 非post请求时整个url作为参数传递出现bug
在非post请求使用整个url作为参数传递到后台时会出现url被截断的bug,这时通过encodeURIComponent进行url的编码可以解决.示例如下: <!--参数url-->Ur ...
- github心得体会 王倩倩 201303014004 计科高职13-1
刚开始接触一门语言软件特别无从下手,尤其还是全英文的,真的是很头疼,注册的时候这个就弄了半天,在网上搜了一下教程然后又结合着老师上课讲的内容自己多做了几遍,也算是对github熟悉了,然后学会操作代码 ...
- Practise 5.2测试与封装(黑白盒
本次测试与封装(黑白盒). 结伴队友:叶子鹏,他的博客地址:http://www.cnblogs.com/kazehanaai/ 由于我们的程序从一开始就一起弄的,所以测试的话不好换伙伴,所以我的伙伴 ...
- ECharts设置y轴显示
参考地址:https://www.w3cschool.cn/echarts_tutorial/echarts_tutorial-no3h2cul.html yAxis: { type: 'value' ...
- SQL语句及5.7.2 mysql 用户管理
一.用户的定义 1.1 用户名+主机域 此处为5.7.2版本的mysql当中password字段已改为authentication_string mysql> select user,host, ...