zoukankan      html  css  js  c++  java
  • 「贪心」士兵

    士兵

    原题链接:士兵

    题目大意

    在一个坐标轴上,给很多坐标,现在要让这些坐标的 y 值相同 x 值不同,求移动的最少距离

    题目题解

    和上一篇题解很像,我们这里将 (x, y) 单独拿出来考虑,(y) 我们可以直接用中位数计算,但是 (x) 还要考虑是否有点已经占领过了,这里可以有更好的方式就是,(x) 就算转移后,他们的位置关系是不变的,那么我们就可以将每个 (x_i) 都减一个 i 这样我们就能够直接用中位数计算了

    详细见代码

    //#define fre yes
    
    #include <cstdio>
    #include <algorithm>
    
    const int N = 10005;
    int x[N], y[N];
    
    int main() {
        static int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d %d", &x[i], &y[i]);
        }
        
        std::sort(x + 1, x + 1 + n);
        std::sort(y + 1, y + 1 + n);
        
        for (int i = 1; i <= n; i++) {
            x[i] -= i;
        } std::sort(x + 1, x + 1 + n);
        midx = x[(n + 1) >> 1];
        midy = y[(n + 1) >> 1];
        for (int i = 1; i <= n; i++) {
            ans += abs(x[i] - midx);
            ans += abs(y[i] - midy);
        } printf("%d
    ", ans);
        return 0;
    }
    
  • 相关阅读:
    Jdbc增删改查的相关操作(Oracle 数据库环境)
    java
    今日随笔
    爬虫之链家网
    爬虫之搜狗
    【题解】「UVA1149」装箱 Bin Packing
    【题解】「SP34013」SEUG
    【题解】「SP867」 CUBES
    【题解】NOI 系列题解总集
    APIO2019简要题解
  • 原文地址:https://www.cnblogs.com/Nicoppa/p/11524638.html
Copyright © 2011-2022 走看看