Codevs P3625 士兵站队问题
来源:互联网 发布:me设计软件 编辑:程序博客网 时间:2024/04/28 05:38
3625 士兵站队问题
题目描述 Description
在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点用整数坐标(x,y)表示。士兵们可以沿网格边往上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x和y的值才能使士兵们以最少的总移动步数排成一行。编程计算使所有士兵排成一行需要的最少移动步数。
输入输出
输入描述 Input Description
第1行是士兵数n,1≤n≤10000。接下来n行是士兵的初始位置,每行有2个整数x和y,-10000≤x,y≤10000。
输出描述 Output Description
一个数据,即士兵排成一行需要的最少移动步数。
样例
样例输入 Sample Input
5
1 2
2 2
1 3
3 -2
3 3
样例输出 Sample Output
8
数据范围及提示 Data Size & Hint
-10000≤x,y≤10000
分析
首先Y轴上肯定是到中位数最小,这样都走的是内部的直线距离,所以Y周直接求中位数即可,对于X轴,我们设到第一个人应到k位置,那么该式可表达为
ANS:=|x0-k|+|x1-(k+1)|+|x2-(k+2)|+|x3-(k+3)|+|x4-(k+4)|
转换一下形式
即ANS:=|(x0-0)-k|+|(x1-1)-k|+|(x2-2)-k|+|(x3-3)-k|+|(x4-4)-k|
所以我们可以求新序列的中位数新序列为b[i]:=a[i]-i+1;
最小值任然是中位数上取到。
代码如下
program soldiers;type ar=array[1..10000] of longint;var n,i,ans,t:longint; x,y:ar;procedure qsort(l,r:longint;var g:ar);var i,j,mid,temp:longint;begin i:=l; j:=r; mid:=g[(i+j)>>1]; while i<=j do begin while g[i]<mid do inc(i); while g[j]>mid do dec(j); if i<=j then begin temp:=g[i]; g[i]:=g[j]; g[j]:=temp; inc(i); dec(j); end; end; if i<r then qsort(i,r,g); if l<j then qsort(l,j,g);end;begin readln(n); for i:=1 to n do readln(x[i],y[i]); qsort(1,n,y); ans:=0; for i:=1 to n do ans:=ans+abs(y[i]-y[(1+n) div 2]); qsort(1,n,x); for i:=1 to n do begin x[i]:=x[i]-i+1; end; qsort(1,n,x); for i:=1 to n do ans:=ans+abs(x[i]-x[(1+n) div 2]); write(ans);end.
评测结果
测试点#sol0.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#sol1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#sol10.in 结果:AC 内存使用量: 256kB 时间使用量: 5ms
测试点#sol2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#sol3.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#sol4.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#sol5.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#sol6.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#sol7.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#sol8.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#sol9.in 结果:AC 内存使用量: 256kB 时间使用量: 4ms
Daydream&Wishful
- Codevs P3625 士兵站队问题
- 士兵站队问题
- 士兵站队问题sol
- 士兵站队问题
- 【9209】士兵站队问题
- 士兵站队问题
- 南邮-1212-士兵站队问题
- 看到的士兵站队问题
- 士兵站队
- 士兵站队
- 中位数的应用—士兵站队问题
- 南邮 OJ 1212 士兵站队问题
- 『洛谷T7835』士兵站队问题
- 【日常学习】【数学】codevs3625 士兵站队问题题解
- 士兵站队(pku1723)
- 洛谷 P1889 士兵站队
- Vijos P2773 士兵站队
- 站队问题
- 【C#】C#基础概念
- Vijos1096 联合权值
- 红黑树实现Map
- 【C#】29. VIX指数的实现(使用上证50ETF为原始数据)
- iOS中 轮播图放哪最合适? 技术分享
- Codevs P3625 士兵站队问题
- JavaScript学习之自定义对象
- Java和OC之间的比较
- 使用 DiskLruCache 缓存bitmap
- launchMode使用详解
- 动画特效十五:网易新闻之头部导航切换效果
- jdbc:增删改查
- 工厂模式&&抽象工厂模式
- 机器学习(5)——决策树(上)原理