【LOJ520】「LibreOJ β Round #3」绯色 IOI(开端)

传送门


题解:

排序。

现在问题是找出两条从 1 1 1 n n n的路径使得代价最小。

显然路径上点的编号只可能递增。

容易证明 i i i i + 1 i+1 i+1不能存在于同一条路径中。考虑 p < i < i + 1 < q p<i<i+1<q p<i<i+1<q,且 p , q p,q p,q不与 i , i + 1 i,i+1 i,i+1在同一路径,交换显然平方和会变小。

所以合法方案就是 ( 1 , 2 ) , ( 1 , 3 ) , ( 2 , 4 ) , ( 3 , 5 ) , ⋯ ( n − 2 , n ) , ( n − 1 , n ) (1,2),(1,3),(2,4),(3,5),\cdots (n-2,n),(n-1,n) (1,2),(1,3),(2,4),(3,5),(n2,n),(n1,n)


代码:

#include<bits/stdc++.h>
#define ll long long
#define re register
#define cs const

cs int N=1e5+7;

int n;ll ans;
int v[N];

signed main(){
#ifdef zxyoi
	freopen("begin.in","r",stdin);
#endif 
	scanf("%d",&n);
	for(int re i=1;i<=n;++i)scanf("%d",v+i);
	std::sort(v+1,v+n+1);v[0]=v[1],v[n+1]=v[n];
	for(int re i=2;i<=n+1;++i)ans+=(ll)(v[i]-v[i-2])*(v[i]-v[i-2]);
	std::cout<<ans<<"\n";
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值