今天太无聊了,居然刷水题,不过觉得这道题挺有意义的,虽然还是很水 0 0
题意: 略(中文)
思路:
枚举每个点到其他所有点的距离和,取最小值。
先排序。然后求第一个点到其他点的距离和。然后向右移动,此时左边的点远离,右边的点靠近,可以O(1)的求出下一个点到其他点的距离。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 int a[1000]; 8 9 int main() { 10 int T; 11 scanf("%d", &T); 12 while (T--) { 13 int n; 14 scanf("%d", &n); 15 for (int i = 0; i < n; i++) 16 scanf("%d", &a[i]); 17 sort(a, a+n); 18 int now = 0; 19 for (int i = 1; i < n; i++) 20 now += a[i]-a[0]; 21 int ans = now; 22 for (int i = 1; i < n; i++) { 23 now += (i-n+i)*(a[i]-a[i-1]); 24 ans = min(ans, now); 25 } 26 printf("%d ", ans); 27 } 28 29 return 0; 30 }