zoukankan      html  css  js  c++  java
  • 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

     

    这题我还没弄明白,,

    说是小学奥数,,

    为什么感觉像贪心。。

    结论题吗???

    不懂,

    必须从0开始,

    从1又要特殊处理。

    先看代码吧:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 long long n,a,b;
     9 int x[20002],y[20002];
    10 
    11 int abss(int a,int b)
    12 {
    13     if(a>b) return a-b;
    14     else return b-a;
    15 }
    16 
    17 int main()
    18 {
    19     scanf("%d",&n);
    20     for(int i=0;i<n;++i)
    21         scanf("%d%d",&x[i],&y[i]);
    22     sort(x,x+n);
    23     sort(y,y+n);
    24     for(int i=0;i<n;++i)
    25         x[i]-=i;
    26     sort(x,x+n);
    27     for(int i=0;i<n;++i)
    28     {
    29         a+=abss(x[n/2],x[i]);
    30         b+=abss(y[n/2],y[i]);
    31     }
    32     printf("%d",a+b);
    33     return 0;
    34 }

    如果你不开心,那我就把右边这个帅傻子分享给你吧, 

    你看,他这么好看,那么深情的望着你,你还伤心吗? 

    真的!这照片盯上他五秒钟就想笑了。 

    一切都会过去的。

  • 相关阅读:
    ZOJ 3332 Strange Country II
    ZOJ 3331 Process the Tasks(双塔DP)
    ZOJ 3326 An Awful Problem(模拟)
    HDU 1796 How many integers can you find(容斥原理)
    HDU 4059 The Boss on Mars(容斥原理)
    HDU 4135 Co-prime(容斥原理)
    HDU 5677 ztr loves substring(回文串加多重背包)
    CodeForces 668B Little Artem and Dance
    CodeForces 667A Pouring Rain
    Java实现 LeetCode 764 最大加号标志(暴力递推)
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9434991.html
Copyright © 2011-2022 走看看