• 洛谷 P1889 士兵站队


    题目描述

    在一个划分成网格的操场上, n个士兵散乱地站在网格点上。由整数 坐标 (x,y) 表示。士兵们可以沿网格边上、下左右移动一步,但在同时刻任一网格点上只能有名士兵。按照军官的命令,们要整齐地列成个水平队列,即排成 队列,即排成 (x,y),(x+1,y), …,(x+n -1,y) 。如何选择 x 和y的值才能使 士兵们以最少的总移动步数排成一列。

    输入输出格式

    输入格式:

     

    文件的第 1 行是士兵数 n,1≤n≤10000 。接下来 n 行是士兵的初始位置, 每行 2 个整数 x 和y,-10000 ≤x,y≤10000 。

     

    输出格式:

     

    文件中 只有一个整 数是士兵排成一行需要的最少移动步。

     

    输入输出样例

    输入样例#1: 复制
    5
    1 2
    2 2
    1 3
    3 -2
    3 3
    输出样例#1: 复制
    8
    思路:小学奥数。
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,ans;
    int midx,midy;
    int x[10010],y[10010];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&x[i],&y[i]);
        sort(x+1,x+1+n);
        sort(y+1,y+1+n);
        for(int i=1;i<=n;i++)    x[i]-=i;
        sort(x+1,x+1+n);
        if(n%2==1){ midx=x[n/2+1];midy=y[n/2+1]; }
        else{ midx=(x[n/2]+x[n/2+1]+1)/2;midy=(y[n/2]+y[n/2+1]+1)/2; }
        for(int i=1;i<=n;i++)
            ans+=abs(midx-x[i])+abs(midy-y[i]);
        cout<<ans;
    }
    
    
    
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    Spring 控制器层如何调用DAO层
    Spring 工程分层
    spring boot工程如何启用 热启动功能
    Spring 视图层如何显示验证消息提示
    Sping POJO中如何添加验证规则和验证消息提示
    Spirng 分层,增加数据访问对象层
    Spring A 标签链接使用
    Spring 控制器重定向
    课程详情页之后台
    课程详情页之前台
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7989226.html
Copyright © 2020-2023  润新知