UVa221 Urban Elevations
离散化处理。判断建筑可见性比较麻烦。下面采用离散化解决:把所有的x坐标排序去重,在相邻两个x坐标表示的区间中,整个区间要么同时可见,要么同时不可见。如何判断该区间是否可见?具体做法是选取该区间中点坐标x=mx来做代表,判断mx是否可见。那么判断该监周屋是否在点mx0可见?首先该建筑物必须包含该点,并且在他南边的包含该点的建筑物不能比它高。
//--------离散化处理技巧
//----------------------
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 100+ 5; struct Building{
int id;
double x, y, w, l, h;
bool operator<(Building m){
if (m.x == x)return y < m.y;
else return x < m.x;
} } b[maxn]; double x[2 * maxn];
int n,m; //判断下标为i的建筑物在x=mx处是否覆盖
bool cover(int i, double mx){
return mx<b[i].x + b[i].w&&mx>b[i].x;
} //判断建筑物是否在mx处可见
bool isVision(int i, double mx){
if (!cover(i, mx))return false;
//判断它南边是否有建筑物覆盖该点
for (int k = 0; k < n; k++){
if (b[k].y<b[i].y&&b[k].h>=b[i].h&&cover(k, mx))
return false;
}
return true;
}
int main(){
int kase = 1;
while (scanf("%d", &n) && n){
for (int i = 0; i < n; i++){
scanf("%lf%lf%lf%lf%lf",&b[i].x, &b[i].y, &b[i].w, &b[i].l, &b[i].h);
b[i].id = i + 1;
x[2 * i] = b[i].x, x[2 * i + 1] = b[i].x + b[i].w;
}
sort(b, b + n);
sort(x, x + 2 * n);
//去重复
m = unique(x, x + 2*n) - x; vector<int>v;
int j;
for (int i = 0; i < n; i++){
//枚举每一个mx
for (j = 0; j < m - 1; j++){
if (isVision(i, (x[j] + x[j + 1]) / 2))
break; //一旦遇到当前建筑物在该点可见则跳出循环
}
if (j<m-1)v.push_back(b[i].id);
}
if (kase>1)printf("\n");
printf("For map #%d, the visible buildings are numbered as follows:\n", kase++);
printf("%d", v[0]);
for (int i = 1; i < v.size(); i++)printf(" %d", v[i]);
printf("\n");
}
return 0;
}
UVa221 Urban Elevations的更多相关文章
- X - Urban Elevations
Urban Elevations An elevation of a collection of buildings is an orthogonal projection of the buil ...
- UVa 221 Urban Elevations 城市正视图 离散化初步 无限化有限
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 题目大意: 题目传送门:UVa 221 Urban Elevations 给出城市中建筑物的x, ...
- UVa 221 (STL 离散化) Urban Elevations
题意: 作图为n个建筑物的俯视图,右图为从南向北看的正视图,按从左往右的顺序输出可见建筑物的标号. 分析: 题中已经说了,要么x相同,要么x相差足够大,不会出现精度问题. 给这n个建筑物从左往右排序, ...
- UVA 221 - Urban Elevations(离散化)!!!!!!
题意:给出一张俯视图.给出N个建筑物的左下标,长度,宽度,高度.现在求,从南面看,能看到那些建筑? Sample Input 14 160 0 30 60 30 125 0 32 28 60 95 0 ...
- Urban Elevations UVA - 221
题目大意:给出建筑的俯视图,以及每个建筑的左下角坐标,宽度,长度,高度.求正视图可观察到的建筑的编号 思路:建筑物的可见性等于南墙的可见性,依据左下角排序后,逐个判断每个建筑是否可见.对南墙的x坐标进 ...
- UVA 221 Urban Elevations
思路: 一些解释: ①:建筑的排序: 下面是以输入顺序为标号,在数组bd中的顺序: 排序后在数组bd中的顺序: 以后我们比较就按这个顺序 ②:x坐标的排序 x的内容是每一个建筑的左边界和右边界,我们把 ...
- 【紫书】Urban Elevations UVA - 221 离散化
题意:给你俯视图,要求依次输出正视图中可以看到的建筑物 题解:任意相邻的x间属性相同,所以离散化. 坑:unique只能对数组用.下标易错 list不能找某元素的next.用了个很麻烦的处理 数组: ...
- 紫书第5章 C++STL
例题 例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474) 主要是熟悉一下sort和lower_bound的用法 关于lower_bound: http://blo ...
- Urban Planning and Public Health - Reflection on Professor Webster's article in Urban Planning Forum
1. General review. Professor Webster published this article in Urban Planning Forum, one of the top ...
随机推荐
- sqlachemy 原生sql输出
在创建引擎时,将echo参数配置成True,会输出sql执行语句记录.默认False create_engine(statsticConf.sqlalchemy_mysql,connect_args= ...
- [UOJ#348][WC2018]州区划分
[UOJ#348][WC2018]州区划分 试题描述 小 \(S\) 现在拥有 \(n\) 座城市,第ii座城市的人口为 \(w_i\),城市与城市之间可能有双向道路相连. 现在小 \(S\) 要将这 ...
- [洛谷P4074][WC2013]糖果公园
题目大意:给一棵$n$个节点的树,每个点有一个值$C_i$,每次询问一条路径$x->y$,求$\sum\limits_{c}val_c\times \sum\limits_{i=1}^{cnt_ ...
- Solidity陷阱:以太坊的随机数生成
title: Solidity陷阱:以太坊的随机数生成 Solidity是一种相当新的语言,因为没有代码是完美的,它包含与代码相关的问题以及你希望用它完成的任务.本文将指导你使用随机数作为以太坊智能合 ...
- Batting Practice LightOJ - 1408
Batting Practice LightOJ - 1408(概率dp) 题意:有无限个球,进球的概率为p,问你连续不进k1个球或者连续进k2个球需要使用的球的个数的期望 思路: \(定义f[i]表 ...
- BZOJ2157 旅游 【树剖 或 LCT】
题目 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径. ...
- 纯css美化复选框,单选框,滑动条(range)
<div class="box"> <!-- 借鉴地址:http://www.cnblogs.com/xiaoxianweb/p/5465607.html --& ...
- mvvm实现
https://segmentfault.com/a/1190000006599500 http://blog.csdn.net/pur_e/article/details/53066275
- poj 3648 Wedding 2-SAT问题入门题目
Description Up to thirty couples will attend a wedding feast, at which they will be seated on either ...
- Mysql建立触发器
DELIMITER $$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `AddTransferAccountLog` AFTER INSERT ON ...