题意:给出N个数,求形成的N^2对数的差的绝对值之和.(N<=10000)
分析:N^2做肯定不行.我们看ai这个数与其他数对答案的贡献.
sum=∑|ai-aj|.去掉绝对值,如果有k个数比ai小,那么ai为sum贡献了k个+ai,
n-k-1个-ai.然后算法就清晰了,排序,O(N)地扫一遍统计答案.
code:
var a:array[0..10001] of longint;
n,i,j:longint;
ans,now:int64;
procedure sort(l,r:longint);
var i,j,mid,temp:longint;
begin
i:=l; j:=r;
mid:=a[(l+r)>>1];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
inc(i); dec(j);
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j);
end;
begin
readln(n);
for i:=1 to n do readln(a[i]);
sort(1,n);
for i:=1 to n do
inc(ans,int64(a[i])*int64(i-1)-int64(a[i])*int64(n-i));
writeln(ans*2);
end.
浙公网安备 33010602011771号