Soldiers(0696)

Time limit(ms): 1000
Memory limit(kb): 65535
Submission: 1077
Accepted: 432
Accepted

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

计算使所有士兵排成一行需要的最少移动步数。

Description
第1 行是油井数n,1< =n< =10000。接下来n 行是油井的位置,每行2个整数x和y,-10000< =x,y< =10000。

Input
第1 行中的数是士兵排成一行需要的最少移动步数。

Output
1
2
3
4
5
6

5
1 2
2 2
1 3
3 -2
3 3

Sample Input
1
8
Sample Output
Hint
mryang
坑点:不知道为什莫多次输入会超时   
解题思路:根据题意,要求所有士兵的最小移动步数,首先要找出他们需站成的水平队列的第一个坐标(x,y)。求该点的纵坐标y很容易,只需将所有士兵的坐标按纵坐标由小到大排序,他们纵坐标的中位数即为所求点的纵坐标y。然而要求该点的横坐标x,就需仔细思考,我们可以知道要使所有士兵的移动步数最小,那么每个士兵都应该移动到离自己最近的队列位置,但又不能插队,所以第一个士兵应该移动进队列的第一个位置,第二个士兵应该移动进队列的第二个位置……设每个士兵的横坐标按由小到大排序后为X0,X1,X2,……所以,我们可以得出所有士兵在x方向的移动步数为|X0-x|+|X1-(x+1)|+…+|Xn-1-(x+n-1)|,将该式子变形可得|X0-x|+|(X1-1)-x|+…+|(Xn-1-(n-1))-x|,可以发现,要使该式子最小,则x为X0,X1-1,X2-2,…,Xn-1-(n-1)的中位数。由此就可以找出水平队列的第一个坐标(x,y),然后根据第一个士兵移动进队列的第一个位置,第二个士兵移动进队列的第二个位置……计算出移动步数即为最小移动步数
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;

int n;
struct node 
{
int x,y;
}p[10005],b[10005];
bool cmpx(node a,node b)
{
return a.x<b.x;
}
bool cmpy(node a,node b)
{
return a.y<b.y;
}
int main()
{
int i,j;
int mindx=0,mindy=0;
scanf("%d",&n);

for(i=1;i<=n;i++)
{
scanf("%d%d",&p[i].x,&p[i].y);
}
memcpy(b,p,sizeof(b));
sort(b+1,b+1+n,cmpx);  
    for(i=1;i<=n;i++)  
    b[i].x=b[i].x-i+1;  
    sort(b+1,b+1+n,cmpx);  //注意这里要再次按横坐标由小到大排序  
//寻找x的平均值
sort(p+1,p+n+1,cmpy);
// for(i=1;i<=n;i++) printf("%d %d\n",b[i].x,b[i].y);
if(n%2==0)
{

mindy=p[n/2].y; 
mindx=b[n/2].x;
}
else
{
mindy=p[(n+1)/2].y; 
mindx=b[(n+1)/2].x;
}
int sum=0;
// printf("%d %d\n",mindx,p[(n+1)/2].y);
sort(p+1,p+n+1,cmpx);
for(i=1;i<=n;i++)
{
sum+=abs(p[i].x-mindx-i+1)+abs(p[i].y-mindy);
}
printf("%d\n",sum);
return 0;
}

Soldiers(0696)相关推荐

  1. G - SOLDIERS POJ - 1723 sort+数学

    G - SOLDIERS POJ - 1723 题解 好妙啊! 由于与路径没啥关系,走折线即可 先找出 y 的中位数,全部走到中位数的位置 对 x ,先排序,再构造一个 temp[i] = x[i] ...

  2. POJ 1723 Soldiers (中位数)

    $ POJ~1723~Soldiers $ (中位数) $ solution: $ 这道题说难也不算太难,但是当时自己想的很矛盾.所以还是列一篇题解. 这道题首先比较容易看出来的就是:行和列是两个分开 ...

  3. VA 521流量计0696 0521_A1_B1_C1_D1_E1_F1_G1_H1_I1_J1_K1_L1_M1_R1

    VA 521流量计0696 0521_A1_B1_C1_D1_E1_F1_G1_H1_I1_J1_K1_L1_M1_R1 VA521 - 用于压缩空气和气体的紧凑型管道式流量计 流量计集成气流稳定器并 ...

  4. 编写Java程序,定义士兵类(Soldiers)并初始化5个士兵对象。

    返回本章节 返回作业目录 需求说明: 创建士兵类(Soldiers),定义有一个String类型参数name,代表士兵的姓名,两个int类型变量x和y,分别表示士兵所在的坐标位置,x代表横坐标,y代表 ...

  5. 问题 c: SOLDIERS

    妙笔难书一纸愁肠,苍白的誓言,终究抵不过岁月的遗忘. 题目描述 N soldiers of the land Gridland are randomly scattered around the co ...

  6. 【POJ 1723 --- SOLDIERS】

    [POJ 1723 --- SOLDIERS] Description N soldiers of the land Gridland are randomly scattered around th ...

  7. 【POJ 1723】SOLDIERS(排序、中位数)

    题面:SOLDIERS 题目大意 有 nnn 个士兵,并且知道每个士兵在二维坐标图上的位置. 士兵可以进行移动,但是每个士兵每次只能向上.向下.向左或向右移动一个单位,因此,他的 xxx 或 yyy ...

  8. 【POJ1723】SOLDIERS(中位数,货仓选址)

    problem 平面上有N(N<=10000)个点 求这些点变成一条水平线的最小移动步数 solution 对于y轴,易证得在中位数处取到最优,直接排序统计即可. 对于x轴,因为要保证相对顺序, ...

  9. poj1723 SOLDIERS

    看错题了无语...还以为只要在一排并且每个位置最多为1个士兵就可以... 原来是(x,y), (x+1,y), ..., (x+N-1,y), y取中点,x先减i,再去中点. 就是贪心- #inclu ...

最新文章

  1. 设置KMPlayer的音量控制的快捷键
  2. Ubuntu21.04 Docker 安装
  3. CSS——规避脱标流和vertical-align
  4. IIS安装与MVC程序部署
  5. 整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
  6. Scala 隐式转换
  7. 动态字符串的存储结构的实现
  8. 模拟实现CRC校验算法课程设计代码(C语言)
  9. 在 Apple Silicon Mac 上 DFU 模式恢复 macOS 固件
  10. 气象大数据平台(天擎)数据读取方法(python)(雷达数据下载)
  11. C语言-英文字母倒序转换
  12. 数字转换成中文汉字数字
  13. NOIP2012 提高组 Day 2
  14. 社工获取ip tips
  15. 第三章 页表管理(Page Table Management)
  16. php文件安全访问权限,如何解决“若要获取访问该文件夹的权限,您需要使用安全选项卡”的问题...
  17. 解决问题:The field file exceeds its maximum permitted size of 1048576 bytes
  18. SAP MIRO付款条件与折扣
  19. 5y计算机应用2010综合测评答案,福师大《数据库管理与应用》在线作业一(答案参考)...
  20. JavaScript图片弹窗

热门文章

  1. 人工智能——机器学习2
  2. sql server 2012 报表开发(1) 如何使用Reporting Service 2012制作报表
  3. Android自定义控件等打包成arr文件
  4. 通过设置让火狐浏览器自动清缓存,不需要自己每次手动清除了
  5. python之mock接口
  6. zip 压缩方式:按标准方式和存储方式压缩
  7. 贪吃蛇小游戏————兄弟问我是怎么摸鱼的,我给他一看这个,他笑了
  8. 最爱你的男孩总把你挂在心上
  9. miRNA靶基因软件预测分值如何看?
  10. 计算机考级各省份难度,各省公务员考试难度排行榜,看看你的省排第几!