士兵站队
来源:互联网 发布:幼儿园美工室设计 编辑:程序博客网 时间:2024/04/28 14:54
Problem Description
在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排成(x,y),(x+1,y),...,(x+n-1,y)。如何选择x和y的值才能使士兵们以最少的总移动步数排成一列。
Input
输入有多组数据,每组数组的第一行是士兵数n,1<=n<=10000。接下来n行是士兵的初始位置,每行2个整数x和y,-10000<=x,y<=10000。
Output
对于每组数据输出士兵排成一行需要的最小移动步数。
Sample Input
51 22 21 33 -23 3
Sample Output
8
/*
解题报告:Y轴的坐标就是中位数。在X轴上,设它们的最终坐标为D,D+1,D+2....D+(N-1);
则X轴上的每个点移动了SUM=|(X0-D)|+|(X1-D-1)|+|(X2-D-)|+.....+|(X(N-1)-D-N+1)|;
变形可得:SUM=|(X0-D)|+|(X1-1-D)|+.....+|(X(N-1)-N+1-D)|.
采取中位数求得D。
*/
//标程:
#include<stdio.h>#include<algorithm>#include<stdlib.h>using namespace std;int a[10010],b[10010];int main(){//freopen("a.txt","r",stdin);int n,i;while(scanf("%d",&n)!=EOF){for(i=0;i<n;i++) scanf("%d%d",&a[i],&b[i]);sort(a,a+n); sort(b,b+n);for(i=0;i<n;i++) a[i]-=i;sort(a,a+n);int sum1=0,sum2=0; for(i=0;i<n;i++){sum1+=abs(a[i]-a[n/2]);sum2+=abs(b[i]-b[n/2]);}printf("%d\n",sum1+sum2);}return 0;}
- 士兵站队
- 士兵站队
- 士兵站队(pku1723)
- 士兵站队问题
- 士兵站队问题sol
- 士兵站队问题
- 【9209】士兵站队问题
- 洛谷 P1889 士兵站队
- 士兵站队问题
- Vijos P2773 士兵站队
- 练习赛10.5.士兵站队
- 南邮-1212-士兵站队问题
- Codevs P3625 士兵站队问题
- 看到的士兵站队问题
- 中位数的应用—士兵站队问题
- 南邮 OJ 1212 士兵站队问题
- 中位数——士兵站队 nkoj 3551
- POJ - 1723 Soldiers 士兵站队 排序+中位数
- QSystemTrayIcon
- java awt简单示例 frame and panel
- C和C++中static关键字的区别
- hibernate 配置
- python中参数(带星号的参数)
- 士兵站队
- vb中的日期控件Date TimerPicker
- linux驱动结构之device
- webpy的Hello World
- 理解VMware的三种网络模型
- 黑马程序员_基础测试
- 自行车的最有效制动
- <Xen虚拟化技术>阅读笔记---第三章 Xen信息页
- C++拾遗