题解 POJ1723 【SOLDIERS】
题目链接:Link
Problem
Solution
首先我们可以发现:当安排好一个对应的移动方案后,每个士兵的移动的最短距离必然是一个曼哈顿距离。
设从左到右依次对应的士兵分别位于 $ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) $ ,则答案为 $ \sum_{i=1}^n { \left| y-y_i \right| } + \sum_{i=1}^n { \left| x+i-1-x_i \right| } $
于是我们可以发现,y轴上的答案和x轴上的答案可以分开统计。不难得出如下贪心策略:将\(x_i\)从小到大排序。然后x轴上的答案就可以转换成$ \sum_{i=1}^n { \left| x-(x_i+1-i) \right| } $。
然后这个问题就被转换成了2个货仓选址问题。
Code
#include<cstdio>
#include<algorithm>
using std::sort;
typedef long long LL;
const int maxn=10005;
int n,x[maxn],y[maxn];
inline LL abs(const LL &x) { return x>0?x:-x; }
int main()
{
#ifdef localfreopen("pro.in","r",stdin);
#endifscanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d %d",&x[i],&y[i]);sort(x+1,x+n+1);for(int i=1;i<=n;i++) x[i]+=1-i;sort(x+1,x+n+1); sort(y+1,y+n+1);LL res=0,tx=x[(n+1)/2],ty=y[(n+1)/2];for(int i=1;i<=n;i++) res+=abs(x[i]-tx)+abs(y[i]-ty);printf("%lld\n",res);return 0;
}
转载于:https://www.cnblogs.com/happyZYM/p/11379626.html
题解 POJ1723 【SOLDIERS】相关推荐
- poj1723 SOLDIERS(思维题-中位数/货仓选址问题)
题目 n(n<=1e4)个士兵,第i个士兵的位置(xi,yi),-1e4<=xi,yi<=1e4 把士兵安排到同一条水平线上,使之在竖直方向n个士兵相邻 最后排成(x,y),(x+1 ...
- poj1723 Soldiers(中位数)
题目链接 题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 题解 因为我们最终安排的纵坐标是固定的,设纵坐标为yyyyyy,那么我们希望min∣y[i ...
- poj1723 SOLDIERS
看错题了无语...还以为只要在一排并且每个位置最多为1个士兵就可以... 原来是(x,y), (x+1,y), ..., (x+N-1,y), y取中点,x先减i,再去中点. 就是贪心- #inclu ...
- POJ1723 Soldiers 中位数
题目链接 http://poj.org/problem?id=1723 分析 求排成一行的最少操作步数,其横坐标的相对位置肯定不变. 设从 x0x_0x0 往后排,则使横坐标符合要求的操作步数为 ∑ ...
- 《算法竞赛进阶指南(by 李煜东)》习题题解 集合
又是笔者给自己挖的大坑. 这里是李煜东所著<算法竞赛进阶指南(by 李煜东)>的习题题解集合. 有任何错误请在对应文章下反馈或联系 nicest1919@163.com ,谢谢 qwq 从 ...
- ACM基础与精选2018
会津大学基础题 AOJ0001 List of Top 3 Hills[水题] AOJ0002 Digit Number[水题] AOJ0005 GCD and LCM[GCD+LCM] AOJ000 ...
- 【POJ1723】SOLDIERS(中位数,货仓选址)
problem 平面上有N(N<=10000)个点 求这些点变成一条水平线的最小移动步数 solution 对于y轴,易证得在中位数处取到最优,直接排序统计即可. 对于x轴,因为要保证相对顺序, ...
- G - SOLDIERS POJ - 1723 sort+数学
G - SOLDIERS POJ - 1723 题解 好妙啊! 由于与路径没啥关系,走折线即可 先找出 y 的中位数,全部走到中位数的位置 对 x ,先排序,再构造一个 temp[i] = x[i] ...
- POJ 1723 Soldiers (中位数)
$ POJ~1723~Soldiers $ (中位数) $ solution: $ 这道题说难也不算太难,但是当时自己想的很矛盾.所以还是列一篇题解. 这道题首先比较容易看出来的就是:行和列是两个分开 ...
最新文章
- windows下带超时的telnet探测IP和端口
- PowerDesigner16中的对象无效,不允许有扩展属性 问题的解决
- http 路径 |_HTTP 请求與响应的格式及 curl 命令使用
- python学习笔记--迭代器
- 构建一个文本搜索系统
- SSH 上传下载文件
- Springboot+多线程+等待获取执行结果
- PowerDesigner name与code同步问题
- FPM一:简单的road map(GAF)
- ubuntu一些记录
- CMake3.19.2下载
- Saleh-Valenzuela 毫米波信道模型
- cad卸载工具_使用感极好的5款软件分享,款款高逼格,下载之后就没舍得卸载...
- 软件测试从入门到入职,自学规划真的很重要~
- 任正非评华为HR胡玲事件,元芳你怎么看?
- linux c语言内核函数手册,Linux C函数实例速查手册
- 如何制作mp3音频文件?分享制作mp3的简单方法
- 华为过程可信cib是指_华为流程规范考.doc
- python爬虫去哪儿网_用python爬虫爬取去哪儿4500个热门景点,看看国庆不能去哪儿...
- 刀片之家礼品兑换帮助