uva221-Urban Elevations

题意:输出从正视图能看到的建筑物的id。

思路:离散化,把无穷化为有限。把所有x坐标排序去重,则任意两个相邻x坐标形成的区间具有相同属性。只需要在这个区间里任选一个点例如中点,就能判断出这个建筑物在这个区间里是否可见。建筑物的坐标包含这个x坐标,南边不能存在一个建筑物也包含这个坐标并且比它高。

代码:

#include 
#include 
#include 
#include 
#include 
using namespace std;
struct Building{
  int id;
  double x, y, width, depth, height;
  bool operator < (const Building& b) {
    return x < b.x ||(x == b.x && y < b.y);
  }
}no[2000+10];

double x[210];
int n;
bool cover(int i, double mx) {
return no[i].x  <= mx && no[i].x + no[i].width >= mx;
}

bool visible(int i, double mx) {
if (!cover(i, mx)) return false;
for (int k=0; k= no[i].height && cover(k, mx)) return false;
}
return true;
}
int main()
{
    int  times = 0;
    while (scanf("%d", &n) == 1 && n) {
        for (int i = 0; i

         


你可能感兴趣的:(uva221-Urban Elevations)