【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[ ...
随机推荐
- java接口(二)
1.广义的接口,凡是对外暴露的都可以称作接口. 就像电脑的usb插口. 2.什么时候用接口,什么时候用类? . 3.例子 4.问题:
- Python的高级特性4:函数式编程
函数式编程的核心就是把函数当成对象来进行编程. 有两个常用到的方法:map/reduce,filter,其中map和filter是内建方法,而reduce不是,所以需要import相关模块. map接 ...
- Ant 命令行编译Android项目
首先把android sdk下的tools目录加到系统path环境变量里, 要么就得直接指定android.bat的绝对路径 对于一个新项目, 可以用这个命令创建需要的ant编译环境(可以看到andr ...
- Hibernate总结2 API和配置文件
1,Configuration 配置 获取config配置文件的方法 Configuration cfg = new Configuration(); cfg.下面的方法 configure() co ...
- Castle.Net 基本应用
什么是Castle Castle是针对.NET平台的一个开源项目,从数据访问框架ORM到IOC容器,再到WEB层的MVC框架.AOP,基本包括了整个开发过程中的所有东西,为我们快速的构建企业级的应用程 ...
- poj 3255 Roadblocks
Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13216 Accepted: 4660 Descripti ...
- indows 8上强制Visual Studio以管理员身份运行
http://diaosbook.com/Post/2013/2/28/force-visual-studio-always-run-as-admin-on-windows-8 Windows 8的一 ...
- linux addr2line 定位so库崩溃位置
在Linux下写C/C++程序的程序员,时常与Core Dump相见.在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core Dump是Linux仁 ...
- 读书摘要,Hackable Projects
完整读完Google的三篇谈Hackable Projects的文章,以及一篇从Test Pyramid看UnitTest的比重.一篇谈Optimal Logging的文章,感觉这5篇在测试.日志两个 ...
- github上最全的资源教程-前端涉及的所有知识体系
前面分享了前端入门资源汇总,今天分享下前端所有的知识体系. 个人站长对个人综合素质要求还是比较高的,要想打造多拉斯自媒体网站,不花点心血是很难成功的,学习前端是必不可少的一个环节, 当然你不一定要成为 ...