Urban Elevations UVA - 221

问题类型:离散,结构体。

03pie’s solution for [UVA-221]
题目链接:UVA-221

#include 
#include 

using namespace std;

const int maxn=100+5;

struct Building{
    int id;
    double x,y,w,d,h;
    bool operator < (const Building& rhs)   const{
        return xint n;
double x[maxn*2];

bool cover(int i,double mx){
    return b[i].x<=mx&&b[i].x+b[i].w>=mx;
}

bool visible(int i,double mx){
    if(!cover(i,mx))    return false;
    for(int k=0;kif(b[k].y=b[i].h&&cover(k,mx))  return false;
    return true;
}

int main(){
      //  freopen("F://inp.txt","r",stdin);
    int kase=0;
    while(scanf("%d",&n)==1&&n){
        for(int i=0;iscanf("%lf%lf%lf%lf%lf",&b[i].x,&b[i].y,&b[i].w,&b[i].d,&b[i].h);
            x[i*2]=b[i].x; x[i*2+1]=b[i].x+b[i].w;
            b[i].id=i+1;
        }
        sort(b,b+n);
        sort(x,x+n*2);
        int m=unique(x,x+n*2)-x;

        if(kase++)  printf("\n");
        printf("For map #%d, the visible buildings are numbered as follows:\n%d",kase,b[0].id);
        for(int i=1;ibool vis=false;
            for(int j=0;j1;j++){
                if(visible(i,(x[j]+x[j+1])/2)){vis=true;break;} 
            }
            if(vis)printf(" %d",b[i].id);
        }
        printf("\n");
    }
    return 0;
}

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