HDU 4311 Meeting point-1 && HDU 4312 Meeting point-2
这俩个题 题意::给出N(<1e5)个点求找到一个点作为聚会的地方,使每个点到达这里的距离最小。4311是 曼哈顿距离 4312是 切比雪夫距离;
曼哈顿距离 :大家都知道 对于二维坐标系a(xa,yb),b(xb,yb)的曼哈顿距离是abs(xa-xb)+abs(ya-yb);
看的出来这个距离和x,y 都有关,但是X,Y并不相互影响,所以可以分开计算这样,分开计算的好处如下:
如果 只给一个维度的坐标系 ,我们是不可以再什么养的复杂度的时间内处理出来呢? 大难还是很好想的先排序一下,会发现就需要O(n)的时间就可以算出来我们想要的答案
至于俩个维度的合并运算只要O(N)记录就可以了;
切比雪夫距离:
我们知道对于距离一个点的曼哈顿距离为R 的点可以形成一个正方形如下图:

也知道对于距离一个点的切比雪夫距离为R 的点也可以形成一个正方形如下图:

对比俩个图片我们知道:距离一个点的 切比雪夫距离可以通过一定的变换转换成 曼哈顿距离(因为曼哈顿距离怎么算我们上面已经讲过了)!!!;
比较麻烦?:但其实很简单:我们知道上面的 切比雪夫的正方形 旋转45度 在变换一定的倍数会 和 曼哈顿的正方形重合!所以我饿们可以认为 切比雪夫距离是 曼哈顿距离旋转在放大的结果:反过来只要对坐标进行同样的旋转和放大就可以了;
代码如下:::
#include <cstdio>
#include <map>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
typedef long long LL;
struct info
{
LL x,y;
int cnt;
info(){}
info(int x,int y):x(x),y(y){}
};
bool cmpx(info a,info b)
{
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
bool cmpy(info a,info b)
{
if(a.y==b.y) return a.x<b.x;
return a.y<b.y;
}
info ko1[];
info ko2[];
LL dp1[];
LL dp2[];
int n;
void make(int x)
{
int tmpx,tmpy;
tmpx=ko1[x].x;
tmpy=ko1[x].y;
//这么写是按远点点进行逆时针旋转的
//你也可以按别的点进行旋转 不过们的旋转点必须是一个
//列
//tmpx=ko1[x].x-2;
//tmpy=ko1[x].y+12;
ko1[x].x=tmpx-tmpy;
ko1[x].y=tmpy+tmpx;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
// cin>>ko1[i].x>>ko1[i].y;
scanf("%I64d%I64d",&ko1[i].x,&ko1[i].y);
make(i);//有这句是12 没这句是11
}
sort(ko1+,ko1++n,cmpx);
for(int i=;i<=n;i++)
{
ko1[i].cnt=i;
ko2[i]=ko1[i];
}
sort(ko2+,ko2++n,cmpy);
for(int i=;i<=n;i++)
{
dp1[i]=dp1[i-]+abs(ko1[i].x-ko1[].x);
dp2[i]=dp2[i-]+abs(ko2[i].y-ko2[].y);
}
LL ans=1LL<<;
for(int i=;i<=n;i++)
{
LL tmp2=dp2[n]-dp2[i]-(ko2[i].y-ko2[].y)*(n-i)+(ko2[i].y-ko2[].y)*i-dp2[i];
int cnt=ko2[i].cnt;
LL tmp1=dp1[n]-dp1[cnt]-(ko1[cnt].x-ko1[].x)*(n-cnt)+(ko1[cnt].x-ko1[].x)*cnt-dp1[cnt];
ans=min(ans,(tmp1+tmp2)/);// 这个12 要除以2;11不需要
}
cout<<ans<<endl;
}
return ;
}
HDU 4311 Meeting point-1 && HDU 4312 Meeting point-2的更多相关文章
- hdu 4311 & 4312 Meeting point 曼哈顿距离之和最小
hdu 4311 题意 平面上\(n(n\leq 1e5)\)个点,找一个点到其它所有点的曼哈顿距离之和最小. 思路 如果是找一个坐标使得所有点到其曼哈顿距离之和最小,那么将\(n\)个横坐标排个序, ...
- HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)
http://acm.hdu.edu.cn/showproblem.php?pid=4312 题意:在上一题的基础上,由四个方向改为了八个方向. 思路: 引用自http://blog.csdn.net ...
- HDU 3784 继续xxx定律 & HDU 2578 Dating with girls(1)
HDU 3784 继续xxx定律 HDU 2578 Dating with girls(1) 做3748之前要先做xxx定律 对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ ...
- HDU 4352 XHXJ's LIS HDU(数位DP)
HDU 4352 XHXJ's LIS HDU 题目大意 给你L到R区间,和一个数字K,然后让你求L到R区间之内满足最长上升子序列长度为K的数字有多少个 solution 简洁明了的题意总是让人无从下 ...
- HDU 4311 Meeting point-1(曼哈顿距离最小)
http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:在二维坐标中有n个点,现在要从这n个点中选出一个点,使得其他点到该点的曼哈顿距离总和最小. 思路: ...
- HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少. 首先不得不 ...
- 【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)
题目链接 正经解法: 给定n个点的坐标,找一个点,到其他点的曼哈顿距离之和最小.n可以是100000.大概要一个O(nlogn)的算法.算曼哈顿距离可以把x和y分开计算排好序后计算前缀和就可以在O(1 ...
- HDU 4311 前缀和
Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-AC ...
- HDU 4311 Contest 2
求的是曼哈顿距离.可以把X,Y的距离分开来求.其中,求X.Y的距离可以通过排序后递推的方式求出值的. #include <iostream> #include <algorithm& ...
随机推荐
- IOS-UITextField-邮箱后缀联想赛
最近做的项目,有一个函数,百度了一下 结果没 要研究了一下. 当用户输入邮箱形式的账号时,输入完"@"符号后.联想出经常使用的邮箱 点击某一行,将改行代表邮箱自己主动输入到账号输入 ...
- ASA基本配置
拓扑如下: ASA5520# show running-config : Saved:ASA Version 8.0(2) !hostname ASA5520enable password 2KFQn ...
- Python基础 - 关键字
前言 与C一样,python也有自己的关键字,关键字有特殊的意义,不能作为普通的变量名类名等用途 关键字列表 以python2.7.5为例,有如下关键字: and del from not while ...
- HTML学习笔记——各种居中对齐
0.前言 水平居中基本方法--指定块的宽度并设定块的左右外边距为auto,上下外边距可取0,那么该块能够在父元素中水平居中. 样式例如以下: 1:margin:0px auto 2:margi ...
- Win32 Windows编程 十
一 Windows画图 1 图形绘制 1.1 图形绘制的方式 获取到画图的句柄,设备描写叙述符(DC).使用对应的画图API.在设备上绘制图形 1.2 颜色 RGB,每种颜色8位,共24位颜色 32位 ...
- cocos2d-x 消类游戏,类似Diamond dash 设计
前几天刚刚在学习cocos2d-x,无聊之下自己做了一个类似Diamond dash的消类游戏,今天放到网上来和大家分享一下.我相信Diamond dash这个游戏大家都玩过,游戏的规则是这样的,有一 ...
- “简密”App Store处女作开发总结
前言 今天是我的iOS App Store上架应用处女作"简密"第一天上线的日子,简密是我从事iOS开发三年以来的第一款个人上架应用,之前做过两年的企业级应用开发以及公司的电商应用 ...
- 以todomvc为例分析knockout、backbone和angularjs
一.整体结构 项目github地址https://github.com/tastejs/todomvc/ 排除通用的css样式文件和引用的js库文件,仅看html和js 1.1 knockoutjs版 ...
- 程序员的视角:java 线程(转)
在我们开始谈线程之前,不得不提下进程.无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解. 进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小.卧室数量等. ...
- SQL参数化查询的问题
最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...