zoukankan      html  css  js  c++  java
  • 士兵站队问题 【问题描述】

    9、士兵站队问题
    【问题描述】
           在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x 和y的值才能使士兵们以最少的总移动步数排成一列。
    【编程任务】
           计算使所有士兵排成一行需要的最少移动步数。
    【输入格式】
           由文件sol.in提供输入数据。文件的第1 行是士兵数n,1≤n≤10000。接下来n 行是士兵的初始位置,每行2 个整数x 和y,-10000≤x,y≤10000。
    【输出格式】
           程序运行结束时,将计算结果输出到文件sol.out中。文件的第1 行中的数是士兵排成一行需要的最少移动步数。
    【输入样例】
    5
    1 2
    2 2
    1 3
    3 -2
    3 3
     
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int main()
    {
      int n,i,x[10001],y[10001];
      int xs,ys;
      while(cin>>n)
      {
          for(i=0;i<n;i++)
              cin>>x[i]>>y[i];
           sort(x,x+n);
           sort(y,y+n);
           for(i=0;i<n;i++) 
            x[i]-=i;
            sort(x,x+n);
           xs=0;ys=0;
           for(i=0;i<n;i++)
           {
               xs+=abs(x[i]-x[n/2]);
               ys+=abs(y[i]-y[n/2]);
           }
           cout<<(xs+ys)<<endl;
      }
      return 0;
    }
    

      

  • 相关阅读:
    sqlserver2005转换到2000
    vs2008的注册
    给联想K46装系统
    两个调片技巧
    mapx集合的问题
    audio player播放多文件
    JQuery查询ul嵌套结构中当前所处的位置
    .Net中使用带UI的OCX的方法
    U盘启动和量产
    winrar的图标
  • 原文地址:https://www.cnblogs.com/741623027zzx/p/6591824.html
Copyright © 2011-2022 走看看