问题 D: 士兵排阵(中位数:贪心思想)
2017-01-21 12:48
197 查看
Problem Link:http://139.129.36.234/problem.php?cid=1015&pid=3
提交: 48 解决: 13
[提交][状态][讨论版]
AC code:
问题 D: 士兵排阵
时间限制: 1 Sec 内存限制: 128 MB提交: 48 解决: 13
[提交][状态][讨论版]
题目描述
在一个划分成网格的操场上, n个士兵散乱地站在网格点上。 网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、 下、 左、 右移动一步, 但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择 x 和 y的值才能使士兵们以最少的总移动步数排成一列。 计算使所有士兵排成一行需要的最少移动步数。输入
第1行是士兵数 n, 1≤n≤10000。 接下来 n行是士兵的初始位置, 每行有2个整数 x和 y,-10000≤x, y≤10000。输出
数据的输出为一行, 表示士兵排成一行需要的最少移动步数。
样例输入
5 1 2 2 2 1 3 3 -2 3 3
样例输出
8
AC code:
#include<iostream> #include<algorithm> #include<stdio.h> #include<map> #include<math.h> #include<string.h> #include<queue> #include<vector> #include<set> #define LL long long #define exp 1e-9 #define MAXN 1000010 using namespace std; int x[10010],y[10010]; int main( ) { // freopen("D:\\in.txt","r",stdin); int n,i,ans; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&x[i],&y[i]); } sort(x,x+n); sort(y,y+n); ans=0; for(i=0;i<n;i++) { ans+=abs(y[i]-y[n/2]); ans+=abs(abs(x[i]-x[n/2])-abs(i-n/2)); } printf("%d\n",ans); return 0; }
相关文章推荐
- 士兵上楼梯问题(守恒思想)
- 着色问题的代码实现(java版)使用回溯法和贪心思想
- 中位数的应用—士兵站队问题
- 图的点着色、区间着色问题及其应用(基于贪心思想的DFS回溯法求点着色问题和区间着色算法求解任务调度问题)
- 贪心——过河问题(数学思想)——ny_47过河
- 寻找两个数组的中位数 Median of Two Sorted Arrays ***问题转化思想***
- vijosp1691-中位数&贪心-输油管道问题
- 3625 codevs 士兵站队问题 中位数的妙用
- [贪心]活动选择问题 Activity Selection的思想
- 【HDU5545 2015 CCPC 南阳国赛F】【差分约束思想 费用流思想】The Battle of Guandu 官渡之战 重要战场人数多 士兵流向转化问题为最短路spfa+dijkstra双写
- 美开发思想头盔让士兵通过脑电波交流
- 编程之美 - 读书笔记 - 卖书折扣问题的贪心解法
- 《编程之美》读书笔记(四):卖书折扣问题的贪心解法
- 找零钱问题的贪心算法(java描述)
- 贪心算法解决部分背包问题(C语言,ruby)
- 《编程之美》读书笔记(四): 卖书折扣问题的贪心解法
- 数学递推思想在程序中的应用(一)----------兔子问题
- 贪心算法运用于(0/1)背包问题
- 贪心算法解磁盘文件最优存储问题——算法解题报告
- HDOJ2037(今年暑假不AC)典型的贪心问题