[结论] LibreOJ #520. 「LibreOJ β Round #3」绯色 IOI(开端)

题意

戳这里

题解

这是一道结论题。
我们先把数放到数轴上考虑。定义两个点的距离为几何上的距离的平方。
我们可以把一个回路看作两条从 1 n 的不相交的路径。
有一种经典的二路取数的 O(n2)DP ,但是会 T 掉,且很难进一步优化。
怎么办呢?只能观察性质了,这里有一个很强的结论:
除了最两端的 (1,2) (n1,n) ,其他两个相邻的点一定不属于同一条路径。
证明如下:
这里写图片描述
显然有 a2+b2+y2c2+d2+x2 ,把 x=a+b,y=c+d 带入即可得到。

知道这个结论就是傻逼题了。
直接连边: (1,2)(n1,n)(i,i+2)i=1,2,...,n2

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=100005;
typedef long long LL;
int n,a[maxn];
LL ans;
LL sqr(LL x){ return x*x; }
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    sort(a+1,a+1+n);
    ans+=sqr(a[1]-a[2])+sqr(a[n-1]-a[n]);
    for(int i=1;i<=n-2;i++) ans+=sqr(a[i]-a[i+2]);
    printf("%lld\n",ans);
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值