首页 > 代码库 > UVa221 Urban Elevations
UVa221 Urban Elevations
暴力枚举判断是否可见。
注意特判几栋房子一起遮挡一栋房子的情况。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<queue> 6 using namespace std; 7 const int mxn=1010; 8 struct building{ 9 int x,y,w,h;10 int id;11 }a[mxn],b[mxn];12 int cmp(const building c,const building d){13 return (c.x<d.x)||(c.x==d.x && c.y<d.y);14 }15 int n,m;16 bool check(int t){17 int pos=a[t].x;18 int cnt=0;19 for(int i=1;i<=n;i++){20 if(i==t)continue;21 if(a[i].y<a[t].y && a[i].x<=a[t].x && a[i].x+a[i].w>=a[t].x+a[t].w && a[i].h>=a[t].h)return false;22 if(a[i].y<a[t].y && a[i].h>=a[t].h && a[i].x<=pos && a[i].x+a[i].w>=pos)pos=max(pos,a[i].x+a[i].w);23 if(pos<a[t].x+a[t].w)return true;24 return false;25 }26 int ans[mxn],top=0;27 void solve(){28 for(int i=1;i<=n;i++)29 if(check(i))ans[++top]=a[i].id;30 return;31 }32 int main(){33 int i,j;34 int cas=0;35 while(scanf("%d",&n) && n){36 if(cas)printf("\n");37 top=0;38 for(i=1;i<=n;i++){39 scanf("%d%d%d%*d%d",&a[i].x,&a[i].y,&a[i].w,&a[i].h);40 a[i].id=i;41 }42 sort(a+1,a+n+1,cmp);43 solve();44 printf("For map #%d, the visible buildings are numbered as follows:\n",++cas);45 for(i=1;i<top;i++)printf("%d ",ans[i]);46 printf("%d",ans[top]);47 printf("\n");48 }49 return 0;50 }
UVa221 Urban Elevations
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。