这道题是要求直线上所有两点间距离之和。但用一般的方法,时间会达到O(n^2),会TLE。可以从另一个角度考虑。
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define N 10001
4 int n;
5 __int64 a[N];
6 __int64 sum;
7 int compare(const void *p,const void *q)
8 {
9 return (*(int *)p - *(int *)q);
10 }
11 int main()
12 {
13 int i,j;
14 while(scanf("%d",&n) != EOF){
15 for(i = 0;i < n;i++){
16 scanf("%d",&a[i]);
17 }
18 qsort(a,n,sizeof(__int64),compare);
19 sum = 0;
20 for(i = 0;i < n-1;i++){
21 sum += (n-i-1)*(i+1)*(a[i+1]-a[i]);
22 }
23 printf("%I64d\n",2*sum);
24 }
25 system("pause");
26 return 0;
27 }
这时时间是O(n)。