Soldiers(0696)
Soldiers(0696)
计算使所有士兵排成一行需要的最少移动步数。
1
2
3
4
5
6
|
5
1 2
2 2
1 3
3 -2
3 3
|
1
|
8
|
#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)相关推荐
- G - SOLDIERS POJ - 1723 sort+数学
G - SOLDIERS POJ - 1723 题解 好妙啊! 由于与路径没啥关系,走折线即可 先找出 y 的中位数,全部走到中位数的位置 对 x ,先排序,再构造一个 temp[i] = x[i] ...
- POJ 1723 Soldiers (中位数)
$ POJ~1723~Soldiers $ (中位数) $ solution: $ 这道题说难也不算太难,但是当时自己想的很矛盾.所以还是列一篇题解. 这道题首先比较容易看出来的就是:行和列是两个分开 ...
- 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 - 用于压缩空气和气体的紧凑型管道式流量计 流量计集成气流稳定器并 ...
- 编写Java程序,定义士兵类(Soldiers)并初始化5个士兵对象。
返回本章节 返回作业目录 需求说明: 创建士兵类(Soldiers),定义有一个String类型参数name,代表士兵的姓名,两个int类型变量x和y,分别表示士兵所在的坐标位置,x代表横坐标,y代表 ...
- 问题 c: SOLDIERS
妙笔难书一纸愁肠,苍白的誓言,终究抵不过岁月的遗忘. 题目描述 N soldiers of the land Gridland are randomly scattered around the co ...
- 【POJ 1723 --- SOLDIERS】
[POJ 1723 --- SOLDIERS] Description N soldiers of the land Gridland are randomly scattered around th ...
- 【POJ 1723】SOLDIERS(排序、中位数)
题面:SOLDIERS 题目大意 有 nnn 个士兵,并且知道每个士兵在二维坐标图上的位置. 士兵可以进行移动,但是每个士兵每次只能向上.向下.向左或向右移动一个单位,因此,他的 xxx 或 yyy ...
- 【POJ1723】SOLDIERS(中位数,货仓选址)
problem 平面上有N(N<=10000)个点 求这些点变成一条水平线的最小移动步数 solution 对于y轴,易证得在中位数处取到最优,直接排序统计即可. 对于x轴,因为要保证相对顺序, ...
- poj1723 SOLDIERS
看错题了无语...还以为只要在一排并且每个位置最多为1个士兵就可以... 原来是(x,y), (x+1,y), ..., (x+N-1,y), y取中点,x先减i,再去中点. 就是贪心- #inclu ...
最新文章
- 设置KMPlayer的音量控制的快捷键
- Ubuntu21.04 Docker 安装
- CSS——规避脱标流和vertical-align
- IIS安装与MVC程序部署
- 整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
- Scala 隐式转换
- 动态字符串的存储结构的实现
- 模拟实现CRC校验算法课程设计代码(C语言)
- 在 Apple Silicon Mac 上 DFU 模式恢复 macOS 固件
- 气象大数据平台(天擎)数据读取方法(python)(雷达数据下载)
- C语言-英文字母倒序转换
- 数字转换成中文汉字数字
- NOIP2012 提高组 Day 2
- 社工获取ip tips
- 第三章 页表管理(Page Table Management)
- php文件安全访问权限,如何解决“若要获取访问该文件夹的权限,您需要使用安全选项卡”的问题...
- 解决问题:The field file exceeds its maximum permitted size of 1048576 bytes
- SAP MIRO付款条件与折扣
- 5y计算机应用2010综合测评答案,福师大《数据库管理与应用》在线作业一(答案参考)...
- JavaScript图片弹窗