【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)
题目链接
正经解法:
给定n个点的坐标,找一个点,到其他点的曼哈顿距离之和最小。
n可以是100000。
大概要一个O(nlogn)的算法。
算曼哈顿距离可以把x和y分开计算排好序后计算前缀和就可以在O(1)时间内判断一个点到其他点的距离。
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define N 100005
int t,n;
ll ans,sum[N],sx[N],sy[N];
struct p
{
int i;
ll x,y;
} a[N];
int cmpx(p a,p b)
{
return a.x<b.x;
}
int cmpy(p a,p b)
{
return a.y<b.y;
}
int main()
{
scanf("%d",&t);
while(t--)
{
sx[]=sy[]=;
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%lld%lld",&a[i].x,&a[i].y);
a[i].i=i;
}
sort(a+,a+n+,cmpx);
for(int i=; i<=n; i++)
sx[i]=sx[i-]+a[i].x;
for(int i=;i<=n;i++)
sum[a[i].i]=a[i].x*(i-)-sx[i-]+sx[n]-sx[i]-a[i].x*(n-i);
sort(a+,a+n+,cmpy);
for(int i=; i<=n; i++)
sy[i]=sy[i-]+a[i].y;
for(int i=; i<=n; i++)
{
sum[a[i].i]+=a[i].y*(i-)-sy[i-]+sy[n]-sy[i]-a[i].y*(n-i);
ans=(i==)?sum[a[].i]:min(ans,sum[a[i].i]);
}
printf("%lld\n",ans);
}
}
缩小范围法:
另外一种做法,当时我就是这么想的,但是后来没敢交,觉得还是会wa。
因为本身就不是很可靠。
按x排序后,取中间x的附近点来计算(经过我多次提交,发现这个范围不能小于±220,这就是难点所在了,为什么是250左右,赛场上全凭直觉取值)。
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
struct p{ll x,y;}a[];
ll ABS(ll a){
if(a<)a=-a;
return a;
}
ll dis(p a, p b){
return ABS(a.x-b.x)+ABS(a.y-b.y);
}
int cmp(p a,p b){
return a.x<b.x;
}
int main(){
int t,n,s,e;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lld%lld",&a[i].x,&a[i].y);
sort(a+,a++n,cmp);
s=n/-;
e=n/+;
if(s<)s=;
if(e>n)e=n;
ll ans=1LL<<;
for(int z=s;z<=e;z++){
ll s=;
for(int i=;i<=n;i++)
s+=dis(a[z],a[i]);
ans=min(s,ans);
}
printf("%lld\n",ans);
}
}
【HDU 4311】Meeting point-1(前缀和求曼哈顿距离和)的更多相关文章
- 暴力三维树状数组求曼哈顿距离求最值——牛客多校第八场D
涉及的知识点挺多,但是大多是套路 1.求曼哈顿距离的最值一般对所有情况进行讨论 2.三维树状数组用来求前缀最大值 /* 有一个三维坐标系(x,y,z),取值范围为[1,n],[1,m],[1,h],有 ...
- HDU 4311 Meeting point-1(曼哈顿距离最小)
http://acm.hdu.edu.cn/showproblem.php?pid=4311 题意:在二维坐标中有n个点,现在要从这n个点中选出一个点,使得其他点到该点的曼哈顿距离总和最小. 思路: ...
- HDU 4311 Meeting point-1 && HDU 4312 Meeting point-2
这俩个题 题意::给出N(<1e5)个点求找到一个点作为聚会的地方,使每个点到达这里的距离最小.4311是 曼哈顿距离 4312是 切比雪夫距离: 曼哈顿距离 :大家都知道 对于二维坐标系a( ...
- HDU 4311 Meeting point-1 求一个点到其它点的曼哈顿距离之和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4311 解题报告:在一个平面上有 n 个点,求一个点到其它的 n 个点的距离之和最小是多少. 首先不得不 ...
- hdu 4666 Hyperspace(多维度最远曼哈顿距离)
献上博文一篇http://hi.baidu.com/byplane747/item/53ca46c159e654bc0d0a7b8d 设维度为k,维护(1<<k)个优先队列,用来保存0~( ...
- Hdu 4312-Meeting point-2 切比雪夫距离,曼哈顿距离,前缀和
题目: http://acm.hdu.edu.cn/showproblem.php?pid=4312 Meeting point-2 Time Limit: 2000/1000 MS (Java/Ot ...
- hdu 4311 & 4312 Meeting point 曼哈顿距离之和最小
hdu 4311 题意 平面上\(n(n\leq 1e5)\)个点,找一个点到其它所有点的曼哈顿距离之和最小. 思路 如果是找一个坐标使得所有点到其曼哈顿距离之和最小,那么将\(n\)个横坐标排个序, ...
- HDU 4311 前缀和
Description It has been ten years since TJU-ACM established. And in this year all the retired TJU-AC ...
- 前缀+排序 HDOJ 4311 Meeting point-1
题目传送门 题意:给一些坐标轴上的点,选一个点,使得其他点到该点曼哈顿距离和最小 分析:这题有很强的技巧性,直接计算每个点的曼哈顿距离和是不可行的.这里用到了前缀的思想,先对点按照x从左到右排序,p[ ...
随机推荐
- [No000039]操作系统Operating Systems用户级线程User Threads
多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址 ...
- HTML 学习笔记 CSS(轮廓)
轮廓(outline)是绘制于元素周围的一条线 位于边框边缘的外围 可起到突出元素的作用 CSS outline属性规定元素轮廓的样式 颜色和宽度 话不多说 来几个例子 看一看 1:在元素周围画线 & ...
- Use Cursor
declare : CURSOR cursor_name IS select_statement ; open : OPEN cursor_name if the query returns no r ...
- Flex ActionScript版本的Map类型
ActionScript中没有Map类型,因为Object就相当于Map了.Object的属性相当于key,值相当于value. 也就是说,没有必要有Map类型.但是,这样做,也会带来一些问题,造成不 ...
- File类
存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动,传送,亦可以被其他程序使用.由于数据存储在文 ...
- OkHttp使用教程
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- sleep和wait的区别有:
sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法. 3 ...
- 文件夹管理工具(MVC+zTree+layer)(附源码)
写在前 之前写了一篇关于 文件夹与文件的操作的文章 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) 把常用的对于文件与文件夹的操作总结了一 ...
- redis性能测试tcp socket and unix domain
UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socke ...
- HTML5+JS 《五子飞》游戏实现(一)规则
很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种 ...