分析

该题和“输油管道问题”类似,只不过由一维问题编程了二维问题。可以将总步数分解为移动到水平线y位置的总步数ysteps和移动到序列x, x+1, x+2, ... , x+n-1位置的总步数xsteps

  • ysteps的最小值容易计算,将所有士兵的纵坐标ypos[]排序后找出中位数,然后计算abs(xpos[1...n]-zws)即可。
  • xsteps的作如下分析:

共n个士兵,他们相应的X轴坐标为:x0, x1, x2 ... xn-1

设,士兵需要移动到的最终位置的x轴坐标值为:x, x+1, x+2, ..., x+(n-1)

则所求最优步数S=|x0-x|+|x1-(x+1)|+|x2-(x+2)|+...+|xn-1-(x+(n-1))|

经过变形S=|x0-x|+|(x1-1)-x|+|(x2-2)-x|+ ... +|(xn-1-(n-1))-x|

发现没有,问题已经变了,我们现在是在求序列x0, x1-1, x1-2, x1-3, ... xn-1-(n-1)与x绝对值之差的累加和的最小值。这和y方向上的计算是一样的了!因此还是采用取中位数的办法求得x值,最后算出最优解。

  • 整理一下, 思路如下:

    1. 排序y序列ypos
    2. 求出y坐标序列ypos的中位数y_zws
    3. 计算y方向上的最小步数ysteps
    4. 排序x序列xpos
    5. 计算新序列xpos[i]-=(i-1),如xpos[5]-=4
    6. 排序x序列xpos
    7. 计算x方向上的最小步数xsteps
    8. 输出xsteps+ysteps

代码示例

#include<iostream>
#include<cmath>
using namespace std;
int xpos[10001]; //士兵x坐标集合
int ypos[10001]; //士兵y坐标集合
void qsort(int Data[], int low, int high){ //快速排序
int i=low, j=high, m=Data[(low+high)/2];
while(i<=j){
while(Data[i]<m) i++;
while(Data[j]>m) j--;
if(i<=j){
int t=Data[i];
Data[i]=Data[j];
Data[j]=t;
i++, j--;
}
}
if(j>low) qsort(Data, low, j); //对右部分排序
if(i<high) qsort(Data, i, high); //对左部分排序
}
int main(){
int n, steps=0;
scanf("%d", &n);
for(int i=1; i<=n; i++) scanf("%d%d", &xpos[i], &ypos[i]);
qsort(ypos, 1, n); //排序ypos序列
qsort(xpos, 1, n); //排序xpos序列
for(int i=1; i<=n; i++) xpos[i]-=(i-1); //生成新的xpos序列
qsort(xpos, 1, n); //重排xpos序列
for(int i=1; i<=n; i++) //计算步数
steps+=(abs(xpos[i]-xpos[n/2+1])+abs(ypos[i]-ypos[n/2+1]));
printf("%d", steps);
return 0;
}

LFYZ-OJ ID: 1017 士兵站队问题的更多相关文章

  1. 3625 codevs 士兵站队问题 中位数的妙用

    士兵站队问题 题目描述 Description 在一个划分成网格的操场上,n个士兵散乱地站在网格点上.网格点用整数坐标(x,y)表示.士兵们可以沿网格边往上.下.左.右移动一步,但在同一时刻任一网格点 ...

  2. 洛谷 P1889 士兵站队

    P1889 士兵站队 题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网格边上.下左右移动一步,但在同时刻任一网格点上只能有名士兵.按照军 ...

  3. 洛谷P1889 士兵站队

    题目描述 在一个划分成网格的操场上, n个士兵散乱地站在网格点上.由整数 坐标 (x,y) 表示.士兵们可以沿网格边上.下左右移动一步,但在同时刻任一网格点上只能有名士兵.按照军官的命令,们要整齐地列 ...

  4. 士兵站队问题sol

    作者:http://www.cnblogs.com/taoziwel/articles/1859577.html 相类似题目:输油管道问题 [问题描述] 在一个划分成网格的操场上,n个士兵散乱地站在网 ...

  5. 【NEUQACM OJ】1017: 平面切割(特别版)

    1017: 平面切割(特别版) 题目描述 我们要求的是n条闪电型折线分割平面的最大数目.比如,一条闪电型折线可以将平面分成两部分,两条最多可以将平面分成12部分,三条最多可将平面分成31部分,四条最多 ...

  6. 九度oj 题目1017:还是畅通工程

    题目描述:     某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可 ...

  7. POJ 1017

    http://poj.org/problem?id=1017 题意就是有6种规格的物品,给你一些不同规格的物品,要求你装在盒子里,盒子是固定尺寸的也就是6*6,而物品有1*1,2*2,3*3,4*4, ...

  8. Poj 1017 / OpenJudge 1017 Packets/装箱问题

    1.链接地址: http://poj.org/problem?id=1017 http://bailian.openjudge.cn/practice/1017 2.题目: 总时间限制: 1000ms ...

  9. POJ - 1017 贪心训练

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 59725   Accepted: 20273 Descrip ...

随机推荐

  1. chome(谷歌浏览器)上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案

    测试解决方案:关闭搜狗输入法(我用的是搜狗输入法,若使用其他输入法,此方案也可能适用),再测试是否重现浏览器崩溃问题 可选解决方案:升级搜狗输入法(如果想 卸载输入法 也可以) 前面有段时间chome ...

  2. A Deep Learning-Based System for Vulnerability Detection(一)

    接着上一篇,讨论讨论具体步骤实现方法.步骤1-3分别在下面进行阐述,步骤4,6都是标准的,步骤5类似于步骤1-3. 结合这个图进行讨论详细步骤: 步骤1:提取库/API函数调用和程序片段 1.1将库/ ...

  3. WebRtc编译好的vs2015源码

    一直想看webrtc的源码,苦于FQ能力有限且整个编译过程耗时巨大,故求助于互联网.在互联网寻找许久编译好的Webrtc源码,好多版本下载下来总是报各种错误,很是失落. 皇天不负有心人,终于寻得一版可 ...

  4. JavaScript-创建日志调试对象(面向对象实例)

    参考自http://www.2cto.com/kf/201312/261990.html IC.js文件 自己封装的js类库 /** * * @authors Your Name (you@examp ...

  5. yum源 Python3 Django mysql安装

    yum 源安装 yum源位置: yum源仓库的地址 在/etc/yum.repos.d/,并且只能读出第一层的repo文件 yum仓库的文件都是以.repo结尾的 linux软件包管理 yum工具如同 ...

  6. Notepad++设置背景色

    点击菜单“设置”-“语言格式设置” 在语言中,选中Global Styles,在样式栏选 中Default Style,再在右边点击背景色的颜色方块. 在打开的颜色对话框中点击 More Colour ...

  7. 监控elssticSearch健康状态

    [4ajr@elk1 scripts]$ curl 172.30.210.175:9200/_cat/health [4ajr@elk1 scripts]$ cat check_es_healthy. ...

  8. tcping ,一个好用的TCP端口检测工具

    1.常用的用法(windows) tcp -w 10 -t -d -i 5 -j --color 81.156.165.66 443 2. http模式 -u,与-h命令连用,每一行输出目标的url ...

  9. 三、调试IIS启动域名配置

    一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...

  10. Element UI——本地引入iconfont不显示

    前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...