排序然后贪心吧,自己也有点忘记了。地址:http://acm.pku.edu.cn/JudgeOnline/problem?id=2231
#include "stdio.h"

__int64 num[10005];

void swap(int a,int b)


{
__int64 t;
t=num[a];
num[a]=num[b];
num[b]=t;

}

int partion(int low,int high,int p)


{
while(low<=high)

{
if(low<p)

{

if(num[low]>num[p])
{swap(low,p);p=low;}
low++;
}
else

{
if(high>p)

{

if(num[high]<num[p])
{swap(high,p);p=high;}
}
high--;
}
}
return p;
}

void qsort(int left,int right)


{
int middle;
if(left<right)

{
middle=(left+right)/2;
middle=partion(left,right,middle);
qsort(left,middle-1);
qsort(middle+1,right);
}
}

int main()


{
int n,i;
__int64 value,sum;

while(scanf("%d",&n)!=EOF)

{
for(i=0;i<n;i++)

{
scanf("%I64d",&num[i]);
}

qsort(0,n-1);

value=0;
for(i=0;i<n;i++)

{
value+=num[i]-num[0];
}

sum=value;
for(i=1;i<n;i++)

{
value=value+(num[i]-num[i-1])*i-(num[i]-num[i-1])*(n-i);
sum+=value;
}

printf("%I64d\n",sum);
}
return 0;
}
