题目链接:

Finding Hotels

Time Limit: 2000/1000 MS (Java/Others)    

Memory Limit: 102400/102400 K (Java/Others)

Problem Description
There are N hotels all over the world. Each hotel has a location and a price. M guests want to find a hotel with an acceptable price and a minimum distance from their locations. The distances are measured in Euclidean metric.
 
Input
The first line is the number of test cases. For each test case, the first line contains two integers N (N ≤ 200000) and M (M ≤ 20000). Each of the following N lines describes a hotel with 3 integers x (1 ≤ x ≤ N), y (1 ≤ y ≤ N) and c (1 ≤ c ≤ N), in which x and y are the coordinates of the hotel, c is its price. It is guaranteed that each of the N hotels has distinct x, distinct y, and distinct c. Then each of the following M lines describes the query of a guest with 3 integers x (1 ≤ x ≤ N), y (1 ≤ y ≤ N) and c (1 ≤ c ≤ N), in which x and y are the coordinates of the guest, c is the maximum acceptable price of the guest.
 
Output
For each guests query, output the hotel that the price is acceptable and is nearest to the guests location. If there are multiple hotels with acceptable prices and minimum distances, output the first one.
 
Sample Input
 
2
3 3
1 1 1
3 2 3
2 3 2
2 2 1
2 2 2
2 2 3
5 5
1 4 4
2 1 2
4 5 3
5 2 1
3 3 5
3 3 1
3 3 2
3 3 3
3 3 4
3 3 5
 
Sample Output
 
1 1 1
2 3 2
3 2 3
5 2 1
2 1 2
2 1 2
1 4 4
3 3 5
 
题意:
 
给出n个宾馆的坐标和价钱,现在有m个人,给出了m个人的坐标和最高能承受的价钱,现在问在这个交钱范围内最近的那个宾馆的坐标和价格;
如果答案不止一个,那么就输出最先出现的那个;
 
思路:
 
这是青岛现场赛的一道题,但时没做出来,止步银,用kd-tree,一开始我用方差的那个确定划分的维度,一直T,后来变成了按二叉树的深度交替变换维度和加了输入挂才过了;
感觉这题常数卡的好紧;
 
AC代码:
#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int maxn=2e5+20;
const LL inf=1e18; template<class T> void read(T&num) {
char CH; bool F=false;
for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
F && (num=-num);
}
int stk[70], tp;
template<class T> inline void print(T p) {
if(!p) { puts("0"); return; }
while(p) stk[++ tp] = p%10, p/=10;
while(tp) putchar(stk[tp--] + '0');
putchar('\n');
}
int n,m,now,ansid;
LL ansdis,minp[maxn];
struct node
{
LL pos[3],pri;
int id;
}po[maxn],op;
int cmp(node a,node b){return a.pos[now]<b.pos[now];}
void build(int L,int R,int dep,int fa)
{
if(L>R)return ;
int mid=(L+R)>>1;
now=dep;
nth_element(po+L,po+mid,po+R+1,cmp);
minp[mid]=po[mid].pri;
build(L,mid-1,3-dep,mid);build(mid+1,R,3-dep,mid);
minp[fa]=min(minp[fa],minp[mid]);
}
inline LL get_dis(LL tep){return tep*tep;}
void query(int L,int R,int dep)
{
if(L>R)return ;
int mid=(L+R)>>1;
if(minp[mid]>op.pri)return ;
LL dis=get_dis(po[mid].pos[1]-op.pos[1])+get_dis(po[mid].pos[2]-op.pos[2]);
if(op.pri>=po[mid].pri)
{
if(dis<ansdis)ansdis=dis,ansid=mid;
else if(dis==ansdis&&po[mid].id<po[ansid].id)ansid=mid;
}
LL tep=get_dis(po[mid].pos[dep]-op.pos[dep]);
if(op.pos[dep]<=po[mid].pos[dep])
{
query(L,mid-1,3-dep);
if(tep<=ansdis)query(mid+1,R,3-dep);
}
else
{
query(mid+1,R,3-dep);
if(tep<=ansdis)query(L,mid-1,3-dep);
}
}
int main()
{
int T;
read(T);
while(T--)
{
read(n);read(m);
for(int i=1;i<=n;i++)
{
po[i].id=i;
for(int j=1;j<=2;j++)read(po[i].pos[j]);
read(po[i].pri);
}
build(1,n,1,0);
while(m--)
{
ansdis=inf;
read(op.pos[1]);read(op.pos[2]);read(op.pri);
query(1,n,1);
printf("%lld %lld %lld\n",po[ansid].pos[1],po[ansid].pos[2],po[ansid].pri);
}
}
return 0;
}

  

hdu-5992 Finding Hotels(kd-tree)的更多相关文章

  1. HDU 5992 Finding Hotels(KD树)题解

    题意:n家旅店,每个旅店都有坐标x,y,每晚价钱z,m个客人,坐标x,y,钱c,问你每个客人最近且能住进去(非花最少钱)的旅店,一样近的选排名靠前的. 思路:KD树模板题 代码: #include&l ...

  2. Finding Hotels

    Finding Hotels http://acm.hdu.edu.cn/showproblem.php?pid=5992 Time Limit: 2000/1000 MS (Java/Others) ...

  3. HDU5992 - Finding Hotels

    原题链接 Description 给出个二维平面上的点,每个点有权值.次询问,求所有权值小于等于的点中,距离坐标的欧几里得距离最小的点.如果有多个满足条件的点,输出最靠前的一个. Solution 拿 ...

  4. AOJ DSL_2_C Range Search (kD Tree)

    Range Search (kD Tree) The range search problem consists of a set of attributed records S to determi ...

  5. k-d tree 学习笔记

    以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...

  6. 【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree

    2648: SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2459  Solved: 834[Submit][Status][Discu ...

  7. K-D Tree

    这篇随笔是对Wikipedia上k-d tree词条的摘录, 我认为解释得相当生动详细, 是一篇不可多得的好文. Overview A \(k\)-d tree (short for \(k\)-di ...

  8. K-D Tree题目泛做(CXJ第二轮)

    题目1: BZOJ 2716 题目大意:给出N个二维平面上的点,M个操作,分为插入一个新点和询问到一个点最近点的Manhatan距离是多少. 算法讨论: K-D Tree 裸题,有插入操作. #inc ...

  9. k-d Tree in TripAdvisor

    Today, TripAdvisor held a tech talk in Columbia University. The topic is about k-d Tree implemented ...

随机推荐

  1. SQL语句分组排序,多表关联排序

    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

  2. 更新整理本人所有博文中提供的代码与工具(Java,2013.11)

    为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载. Java 1.<高效 Java Web 应用开发框架 JessMA v3. ...

  3. [Cordova] Plugin里使用iOS Framework

    [Cordova] Plugin里使用iOS Framework 前言 开发Cordova Plugin的时候,在Native Code里使用第三方Library,除了可以加速项目的时程.也避免了重复 ...

  4. 《C#微信开发系列(1)-启用开发者模式》

    1.0启用开发者模式 ①填写服务器配置 启用开发模式需要先成为开发者,而且编辑模式和开发模式只能选择一个(进入微信公众平台=>开发=>基本配置)就可以看到以下的界面: 点击修改配置,会出现 ...

  5. sharepoint2013的审核日志的时间区域设置

    最近在项目中碰到审核日志的时间为GMT格式 ,如何格式化成本地时间. 网站集设置成本地区域无法解决此类问题,后来查询资料才知道.无法更改 Change Audit Time From GMT Time ...

  6. ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579

    给esri中国的客服打电话被告知,是一直存在这个bug,arcgis10.2对应的oracle数据库版本要用11.2.0.3及以上的: 1.数据库升级可以用打补丁的当方式. 2.直接重装,我这里是直接 ...

  7. SPF邮件伪造漏洞测试脚本

    测试脚本: # -*- coding: utf-8 -*- import socket,select,base64,os,re,time,datetime class mail: def __init ...

  8. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)上

    本文是gtest高级测试指南的译文,由于文章太长,分上下两部分. 一.简介 本文档将向您展示更多的断言,以及如何构造复杂的失败消息,传播致命的故障,重用和加速您的测试夹具,并在您的测试使用各种标志. ...

  9. js获取网页高度

    网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: document.body.offsetWi ...

  10. iOS Class 使用NSProxy和NSObject设计代理类的差异

    经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并 ...