luogu P3723 [AH2017/HNOI2017]礼物

背景:

最近一直在补坑。

题意:

有两个序列 a , b a,b a,b(围成两个圈),将 a a a序列所有的值加上一个非负整数 c c c(自己给的),将 b b b序列逆时针旋转一定的角度,求 ∑ i = 1 n ( a i − b i ) 2 \sum\limits_{i=1}^{n}(a_i-b_i)^2 i=1n(aibi)2的最小值。

思路:

不妨假设旋转完的 b b b序列为 b ′ b' b。,则题目就是求 ∑ i = 1 n ( a i + c − b i ′ ) 2 \sum\limits_{i=1}^{n}(a_i+c-b'_i)^2 i=1n(ai+cbi)2的最小值。
考虑化简式子。
∑ i = 1 n ( a i + c − b i ′ ) 2 \sum\limits_{i=1}^{n}(a_i+c-b'_i)^2 i=1n(ai+cbi)2
拆括号,得:
∑ i = 1 n ( a i 2 + c 2 + b i ′ 2 + 2 ∗ a i ∗ c − 2 ∗ a i ∗ b i ′ − 2 ∗ c ∗ b i ′ ) \sum\limits_{i=1}^{n}(a_i^2+c^2+{b'_i}^2+2*a_i*c-2*a_i*b'_i-2*c*b'_i) i=1n(ai2+c2+bi2+2aic2aibi2cbi)
发现 a i 2 + b i ′ 2 a_i^2+{b'_i}^2 ai2+bi2为定值,将其提出。
∑ i = 1 n ( a i 2 + b i ′ 2 ) + ∑ i = 1 n ( c 2 + 2 ∗ a i ∗ c − 2 ∗ a i ∗ b i ′ − 2 ∗ c ∗ b i ′ ) \sum\limits_{i=1}^{n}(a_i^2+{b'_i}^2)+\sum\limits_{i=1}^{n}(c^2+2*a_i*c-2*a_i*b'_i-2*c*b'_i) i=1n(ai2+bi2)+i=1n(c2+2aic2aibi2cbi)
再提取一个 2 ∗ c 2*c 2c得:
∑ i = 1 n ( a i 2 + b i ′ 2 ) + ∑ i = 1 n ( c 2 + 2 ∗ c ∗ ( a i − b i ′ ) ) − ∑ i = 1 n ( 2 ∗ a i ∗ b i ′ ) \sum\limits_{i=1}^{n}(a_i^2+{b'_i}^2)+\sum\limits_{i=1}^{n}(c^2+2*c*(a_i-b'_i))-\sum\limits_{i=1}^{n}(2*a_i*b'_i) i=1n(ai2+bi2)+i=1n(c2+2c(aibi))i=1n(2aibi)
提取出一些数,得到:
∑ i = 1 n ( a i 2 ) + ∑ i = 1 n ( b i ′ 2 ) + n ∗ c 2 + 2 ∗ c ∗ ( ∑ i = 1 n a i − ∑ i = 1 n b i ′ ) − ∑ i = 1 n ( 2 ∗ a i ∗ b i ′ ) \sum\limits_{i=1}^{n}(a_i^2)+\sum\limits_{i=1}^{n}({b'_i}^2)+n*c^2+2*c*(\sum\limits_{i=1}^{n}a_i-\sum\limits_{i=1}^{n}b'_i)-\sum\limits_{i=1}^{n}(2*a_i*b'_i) i=1n(ai2)+i=1n(bi2)+nc2+2c(i=1naii=1nbi)i=1n(2aibi)
c c c的问题比较容易搞定,因为它与最后一个因式无关。那么发现只有 − ∑ i = 1 n ( 2 ∗ a i ∗ b i ′ ) -\sum\limits_{i=1}^{n}(2*a_i*b'_i) i=1n(2aibi)为不定值,使 − ∑ i = 1 n ( 2 ∗ a i ∗ b i ′ ) -\sum\limits_{i=1}^{n}(2*a_i*b'_i) i=1n(2aibi)的值最小即可。

考虑构造 b ′ b' b使得其最小,不妨使 a i ′ a'_i ai为原 a a a序列及其反向倍长序列。那么再使 b ′ ′ b'' b b b b的反向序列,此时形成了一个卷积的形式,那么答案一定就为可取的数中的最大值(前面有一个 − - 号)。

最后再套入上式求解即可。

代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const double pai=acos(-1.0);
struct comp
{
	double x,y;
	comp(double xx=0,double yy=0):x(xx),y(yy) {}
	friend comp operator+(const comp &x,const comp &y) {return comp(x.x+y.x,x.y+y.y);}
	friend comp operator-(const comp &x,const comp &y) {return comp(x.x-y.x,x.y-y.y);}
	friend comp operator*(const comp &a,const comp &b) {return comp(a.x*b.x-a.y*b.y,a.x*b.y+b.x*a.y);}
}a[500000],b[500000];
	int n,m,limit=1,l=0;
	int r[500000];
	LL as1=0,as2=0,bs1=0,bs2=0,ans=2147483647;
void FFT(comp *now,int ty)
{
	for(int i=0;i<limit;i++)
		if(i<r[i]) swap(now[i],now[r[i]]);
	for(int mid=1;mid<limit;mid<<=1)
	{
		comp wn(cos(pai/mid),ty*sin(pai/mid));
		for(int j=0,R=(mid<<1);j<limit;j+=R)
		{
			comp w(1,0);
			for(int k=0;k<mid;k++,w=w*wn)
			{
				comp x=now[j+k],y=w*now[j+k+mid];
				now[j+k]=x+y;
				now[j+k+mid]=x-y;
			}
		}
	}
}
	int d1[50010],d2[50010];
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&d1[i]);
		as1+=(LL)d1[i];
		as2+=(LL)d1[i]*d1[i];
	}
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&d2[i]);
		bs1+=(LL)d2[i];
		bs2+=(LL)d2[i]*d2[i];
	}
	while(limit<=(n*3))
		limit<<=1,l++;
	for(int i=1;i<=limit;i++)
		r[i]=((r[i>>1]>>1)|((i&1)<<(l-1)));
	for(int i=1;i<=n;i++)
	{
		a[i].x=a[i+n].x=(double)d1[i];
		b[i].x=(double)d2[n-i+1];
	}
	FFT(a,1);
	FFT(b,1);
	for(int i=0;i<=limit;i++)
		a[i]=a[i]*b[i];
	FFT(a,-1);
	for(int i=1;i<=n;i++)
		for(int j=-m;j<=m;j++)
			ans=min(ans,as2+bs2+j*j*n+(LL)2*j*(as1-bs1)-(LL)2*(LL)(a[i+n].x/limit+0.5));
	printf("%lld",ans);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
探索全栈前端技术的魅力:HTML+CSS+JS+JQ+Bootstrap网站源码深度解析 在这个数字化时代,构建一个既美观又功能强大的网站成为了许多开发者和企业追逐的目标。本份资源精心汇集了一套完整网站源码,融合了HTML的骨架搭建、CSS的视觉美化、JavaScript的交互逻辑、jQuery的高效操作以及Bootstrap的响应式设计,全方位揭秘了现代网页开发的精髓。 HTML,作为网页的基础,它构建了信息的框架;CSS则赋予网页生动的外观,让设计创意跃然屏上;JavaScript的加入,使网站拥有了灵动的交互体验;jQuery,作为JavaScript的强力辅助,简化了DOM操作与事件处理,让编码更为高效;而Bootstrap的融入,则确保了网站在不同设备上的完美呈现,响应式设计让访问无界限。 通过这份源码,你将: 学习如何高效组织HTML结构,提升页面加载速度与SEO友好度; 掌握CSS高级技巧,如Flexbox与Grid布局,打造适应各种屏幕的视觉盛宴; 理解JavaScript核心概念,动手实现动画、表单验证等动态效果; 利用jQuery插件快速增强用户体验,实现滑动效果、Ajax请求等; 深入Bootstrap框架,掌握移动优先的开发策略,响应式设计信手拈来。 无论是前端开发新手渴望系统学习,还是资深开发者寻求灵感与实用技巧,这份资源都是不可多得的宝藏。立即深入了解,开启你的全栈前端探索之旅,让每一个网页都成为技术与艺术的完美融合!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值