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 }
  • 相关阅读:
    帝国CMS采集
    帝国CMS常用资料
    IIS 支持PHP(与Apache环境共存)
    Firebug+Firefox 脚本调试
    javascript 参考
    [__NSCFString objectFromJSONString]: unrecognized selector sent to 解决办法
    大家好,我在CSDN开通了博客
    Apple MachO Linker Error
    ios 排序
    ios 二维码生成 扫瞄
  • 原文地址:https://www.cnblogs.com/pureayu/p/13946490.html
Copyright © 2011-2022 走看看