zoukankan      html  css  js  c++  java
  • HDU 2083 简易版之最短距离

    今天太无聊了,居然刷水题,不过觉得这道题挺有意义的,虽然还是很水 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 }
  • 相关阅读:
    算法笔记--二分图判定
    算法笔记--最小表示法
    Codeforces 525A
    Codeforces 140D
    Codeforces C
    Codeforces 665C
    Codeforces 604B
    Codeforces 285C
    The Fewest Coins POJ
    Triangular Pastures POJ
  • 原文地址:https://www.cnblogs.com/Phantom01/p/3644299.html
Copyright © 2011-2022 走看看