poj 1723 Soldiers【中位数】By cellur925
题目大意:平面上有n个士兵,给出每个士兵的坐标,求出使这些士兵站好所需要的最少移动步数。站好要求:所有士兵y相等,x相邻。即达到 (x,y), (x+1, y), (x+2,y)……的状态。(每行不相邻)
$Sol$
我们很容易能想到,让所有士兵y相等就要把他们都移动到所有士兵y的中位数上。这时可能存在有士兵重合在同一格点的情况。后来x轴的情况:
x轴时,先进行一次排序后,假设水平线上的n个点存储在数组a[n]中,则第一个点a[0]最终排序后的位置是addr,a[1]的最终位置是(addr+1),a[2]的最终位置是(addr+2)……a[n]------->(addr+n)。分析则有:addr = a[0]-0 = a[1]-1 = a[2]-2 = ... = a[i]-i = ... = a[n]-n。故可将(a[i]-i)视为一个新的point,并将n各新的point移动到同一个位置addr。可以看出,将x轴的问题转化为了和y轴相同的问题。最后得出最少步数。 --------------------- 本文来自 crev 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wutong_v/article/details/51603946?utm_source=copy
也就是说,各个士兵在行上的相对位置是没有变的。
$Code$
#include<cstdio>
#include<algorithm> using namespace std; int n,sta,ans;
struct node{
int x,y;
}p[]; bool cmp(node a,node b)
{
return a.y<b.y;
} bool cmp2(node a,node b)
{
return a.x<b.x;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&p[i].x,&p[i].y);
sort(p+,p++n,cmp);
sta=p[(n+)>>].y;
for(int i=;i<=n;i++)
ans+=abs(sta-p[i].y); sort(p+,p++n,cmp2);
for(int i=;i<=n;i++) p[i].x-=i;
sort(p+,p++n,cmp2);
sta=p[(n+)>>].x;
for(int i=;i<=n;i++)
ans+=abs(sta-p[i].x);
printf("%d",ans);
return ;
}
poj 1723 Soldiers【中位数】By cellur925的更多相关文章
- POJ 1723 SOLDIERS (中位数)
题目大意: 平面上有N(N<=10000)个点,求这些点变成一条水平线的最小移动步数. 算法讨论: 表示自己太弱弱了,打算从今天开始提高一下智商. 我们考虑,既然是要成一条水平线,那么这条直线的 ...
- poj 1723 SOLDIERS 带权中位数
题目 http://poj.org/problem?id=1723 题解 带权中位数类型的题目~ 可以先考虑降维,最后集合的y坐标,明显是y坐标的中位数的位置,容易求出y方向的贡献res_y.比较麻烦 ...
- OpenJudge/Poj 1723 SOLDIERS
1.链接地址: http://bailian.openjudge.cn/practice/1723/ http://poj.org/problem?id=1723 2.题目: 总时间限制: 1000m ...
- POJ 1723 SOLDIERS
SOLDIERS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. Original ID: 1 ...
- poj 1723 中位数
最近在看一些中位数的东西,然后顺便也看了些题目.poj 1723不仅要求到水平位置的最短距离和,还要求水平都相邻的排成一排的最短距离和,即士兵都站成一列. 到y轴的距离好办,按y轴坐标排序,求中位数, ...
- 【POJ 1723】 SOLDIERS
[题目链接] http://poj.org/problem?id=1723 [算法] 中位数 [代码] #include <algorithm> #include <bitset&g ...
- [POJ1723]SOLDIERS(中位数)
题意 给出n个点的坐标,它们只能往上.下.左.右一格一格地移动,求使其移动至水平线上的最小步数. 思路 转载 先易后难,对于纵向的问题,我们推个公式,,这个很容易看出是货仓选址问题,k取y[i]的中位 ...
- POJ 1723
#include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; struct ...
- POJ 2388 Who's in the Middle(水~奇数个数排序求中位数)
题目链接:http://poj.org/problem?id=2388 题目大意: 奇数个数排序求中位数 解题思路:看代码吧! AC Code: #include<stdio.h> #in ...
随机推荐
- oracle 导出数据字典
一.查看当前用户下表名,及表名的备注 select * from user_tab_comments where table_name like 'T_ONLINE%' 二.查询数据字典 -- 1. ...
- 【转载】关于C#静态构造函数的几点说明
一.定义 静态构造函数是C#的一个新特性,其实好像很少用到.不过当我们想初始化一些静态变量的时候就需要用到它了.这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次.也就是在 ...
- 格式转换至yuv422转 yuv420
//pYUV为422,yuv为420 /*ok! * brief:pyuv is yuv422sp srcIn, and yuv is yuv420p desOut */ int YUV422To4 ...
- LeetCode题解(19)--Remove Nth Node From End of List
https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 原题: Given a linked list, remove the ...
- sendmessage传递数组
1.在初始化数组尤其是需要每次都初始化的时候,很多同学使用循环来进行,这样不但速度慢,而且写起来也很长.所以现在提供一个函数来实现这个功能... 原型:extern void *memset(void ...
- WEBGIS控制图层的显示
看别人搞的GIS应用,常常有勾选.取消某个图层的操作,然后地图上就有相应的图形显隐,觉得好酷. 咋实现的? 其实说起来好像也不是特别复杂.在WEB端,实现该功能的原理和步骤是: 1.WEB端加载地图服 ...
- FFT用到的各种素数
int MOD; inline int mul(int a, int b){ return (long long)a * b % MOD; } int power(int a, int b){ ; ) ...
- Exchangeable image file format
Exif - Wikipedia https://en.wikipedia.org/wiki/Exif
- luogu3384 【模板】 树链剖分
题目大意 已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z操作2: 格式: 2 x ...
- How to create a List of ValueTuple?
ValueTuple需要通过NuGet安装System.ValueTuple https://docs.microsoft.com/en-us/dotnet/csharp/tuples?view=ne ...