zoukankan      html  css  js  c++  java
  • SOLDIERS(中位数)

    题目链接

    这道题是对一维中位数定理的一个延伸,变成了二维的形式,其实本质是一样的,只不过要多操作几步。

    对于本道题,要确定一个最短长度,那么首先要确定在哪一行,即纵坐标是多少。

    因此这就变成了求中位数的情况,那么先对所有的纵坐标进行排序,排序完成之后确定纵坐标的中点,然后遍历所有坐标,将其与中点坐标的纵坐标相减取绝对值,那么y方向上的距离就求好了,并且是y方向上的最短距离。

    对于横坐标刚开始没看到要相连。。。对于求横坐标的最短距离,由于是相连的,那么假设第一个相连的横坐标是k,那么接下来的n-1个点的横坐标分别是k+1, k + 2 ... , k + n - 1, 并且设当前最左边的一个士兵的横坐标为X0,那么横坐标的最短距离就是 S = |K-X0| + |K + 1 - X1| + |K + 2 - X2| + ... + |K + N - 1 - (XN- 1) |,而K则是横坐标的中点。

    那么这就很清楚了,代码如下:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cmath>
     4 using namespace std;
     5 
     6 const int N = 10010;
     7 
     8 int a[N], b[N];
     9 
    10 int main(){
    11     int n, cnt = 0;
    12     cin >> n;
    13     for(int i = 0; i < n; i ++)
    14         cin >> a[i] >> b[i];
    15     sort(b, b + n);
    16     sort(a, a + n);
    17     int mid = n / 2;
    18     for(int i = 0; i < n; i ++){
    19         a[i] -= i;
    20         cnt += abs(b[mid] - b[i]);
    21     }
    22     sort(a, a + n);
    23     for(int i = 0; i < n; i ++)
    24         cnt += abs(a[mid] - a[i]);
    25     cout << cnt << endl;
    26 
    27     return 0;
    28 }
  • 相关阅读:
    HDU1058Humble Numbers
    HDU1056 HangOver
    HDU1048The Hardest Problem Ever
    HDU 1028Ignatius and the Princess III(母函数简单题)
    HDU1014Uniform Generator
    HDU1013Digital Roots
    HDU1005Number Sequence(找规律)
    HDU1004 Let the Balloon Rise(map的简单用法)
    HDU1002 -A + B Problem II(大数a+b)
    Codeforces Round #363 (Div. 2)->C. Vacations
  • 原文地址:https://www.cnblogs.com/pureayu/p/13946490.html
Copyright © 2011-2022 走看看