2020 年百度之星·程序设计大赛 - 初赛二——Distance

Distance

Problem Description

小沃沃所在的世界是一个二维平面。他有 n 个朋友,第 i 个朋友距离他的距离为 a[i],小沃沃并不知道这些朋友具体在什么点上。

请问在最优情况下,小沃沃的朋友两两之间的欧几里得距离的和的最小值是几?

假设小沃沃的位置为 P0=(x0,y0),第 i 个朋友的位置为 Pi=(xi,yi),对于所有的 i,需要满足 dist(P0,Pi)=a[i],并且∑n−1i=1∑nj=i+1dist(Pi,Pj) 最小,其中 dist(X,Y) 为连接点 X 和点 Y 的线段的长度。xi,yi 都可以是任意实数。

Input

第一行一个正整数 test(1≤test≤10) 表示数据组数。

对于每组数据,第一行一个正整数 n(1≤n≤100000)。

接下来一行 n 个整数,第 i 个整数 ai 表示第 i 个朋友和小沃沃的距离。

Output

对每组数据输出一行一个数,表示 ∑n−1i=1∑nj=i+1dist(Pi,Pj) 的最小值。答案需要四舍五入到整数。

#include 
using namespace std;

typedef long long ll;
int main()
{
    ll T;
    scanf("%lld",&T);
    while(T--)
    {
       ll m;
       scanf("%lld",&m);
       ll st[m+5];
       for(ll i=0;i<m;i++)
       {
           scanf("%lld",&st[i]);
       }
       sort(st,st+m);
       long long sum=0;
       ll a[m]={ 0};
       for(ll i=0;i<m-1;i++)
       {
           a[i]=st[i+1]-st[i];
       }
       for(ll i=0;i<m-1;i++)
       {
           sum+=a[i]*((m-i-1))*(i+1);
       }
       printf("%lld\n",sum);
    }
}

你可能感兴趣的:(oj,程序设计)