UVALive 5873 - Tree Inspections 【模拟】
来源:互联网 发布:mac怎么安装程序 编辑:程序博客网 时间:2024/06/04 20:11
题目大意:给你一堆树的坐标,然后给你一些横着的路和竖着的路,一棵树如果横着或者竖着可以在没有其他树阻挡的情况下看到一条路,这棵树就是“好的”,问最后“好的”树能否不小于60%。
把点和边一起排序,正向扫一遍,逆向扫一遍扫到点就看看对应位置有没有过树,没有就把当前点标记为“好的”,扫到边就把所有位置的树清空,这个可以用map实现,比较方便。横竖分别做一遍,最后算答案即可。
#include<cstdio>#include<iostream>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<map>using namespace std;struct shu1{int x,y,hao;bool friend operator<(shu1 a,shu1 b){return a.x!=b.x?a.x<b.x:a.y<b.y;}}a[210000];struct shu2{int x,y,hao;bool friend operator<(shu2 a,shu2 b){return a.y!=b.y?a.y<b.y:a.x<b.x;}}b[210000];int f,t,p;map<int,int> mm;int h[110000],v[110000];int ans[110000];int main(){scanf("%d",&f);while(f--){memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%d%d",&t,&p);for(int i=1;i<=t;i++){scanf("%d%d",&a[i].x,&a[i].y);a[i].hao=i;}h[0]=v[0]=0;for(int i=1;i<=p;i++){char c;int q;scanf(" %c %d",&c,&q);if(c=='H'){h[0]++;h[h[0]]=q;}else{v[0]++;v[v[0]]=q;}}for(int i=1;i<=t;i++){b[i].x=a[i].x;b[i].y=a[i].y;b[i].hao=a[i].hao;}memset(ans,0,sizeof(ans));mm.clear();for(int i=1;i<=v[0];i++)mm[v[i]+2000000]=1;for(int i=1;i<=t;i++){if(mm[a[i].x+2000000]){ans[a[i].hao]=1;a[i].y=-1100000;//printf("1hao=%d\n",a[i].hao);}}mm.clear();for(int i=1;i<=h[0];i++)mm[h[i]+2000000]=1;for(int i=1;i<=t;i++){if(mm[b[i].y+2000000]){ans[b[i].hao]=1;b[i].x=-1100000;//printf("2hao=%d\n",a[i].hao);}}for(int i=1;i<=v[0];i++){a[t+i].x=v[i];a[t+i].y=-1100000;}for(int i=1;i<=h[0];i++){b[t+i].x=-1100000;b[t+i].y=h[i];}sort(a+1,a+t+v[0]+1);sort(b+1,b+t+h[0]+1);//for(int i=1;i<=t+v[0];i++)printf("a[%d] x=%d y=%d hao=%d\n",i,a[i].x,a[i].y,a[i].hao);//for(int i=1;i<=t+h[0];i++)printf("b[%d] x=%d y=%d hao=%d\n",i,b[i].x,b[i].y,b[i].hao);mm.clear();int vv=0;for(int i=1;i<=t+v[0];i++){if(a[i].y==-1100000){vv=1;mm.clear();}else{if(vv){if(!mm[a[i].y+2000000]){mm[a[i].y+2000000]=1;ans[a[i].hao]=1;//printf("a1 i=%d hao=%d\n",i,a[i].hao);}}}}mm.clear();vv=0;for(int i=t+v[0];i>=1;i--){if(a[i].y==-1100000){vv=1;mm.clear();}else{if(vv){if(!mm[a[i].y+2000000]){mm[a[i].y+2000000]=1;ans[a[i].hao]=1;//printf("a2 i=%d hao=%d\n",i,a[i].hao);}}}}mm.clear();vv=0;for(int i=1;i<=t+h[0];i++){if(b[i].x==-1100000){vv=1;mm.clear();}else{if(vv){if(!mm[b[i].x+2000000]){mm[b[i].x+2000000]=1;ans[b[i].hao]=1;//printf("b1 i=%d hao=%d\n",i,a[i].hao);}}}}mm.clear();vv=0;for(int i=t+h[0];i>=1;i--){if(b[i].x==-1100000){vv=1;mm.clear();}else{if(vv){if(!mm[b[i].x+2000000]){mm[b[i].x+2000000]=1;ans[b[i].hao]=1;//printf("b2 i=%d hao=%d\n",i,a[i].hao);}}}}int ji=0;for(int i=1;i<=t;i++){if(ans[i])ji++;}if(ji*10>=t*6){printf("PASSED\n");}else{printf("FAILED\n");}//printf("ji=%d\n",ji);}return 0;}
0 0
- UVALive 5873 - Tree Inspections 【模拟】
- Software Inspections
- UVALive 3497 brainfuck [模拟]
- UVALive 4723 水模拟
- UVALive 6833 (模拟 水~)
- UVALive 7503--模拟
- UValive 7269 (模拟)
- UVALive 6833【模拟】
- UVALive 7327【模拟】
- UVALive 7608Robot(模拟)
- UVALive 7752 模拟
- UVALive 6669 Hidden Tree DP
- 【模拟】 UVALive 4168 Lampyridae Teleportae
- UvaLive--6664--Clock Hands【模拟】
- UVALive 4887 Soccer 状压+模拟
- UVALive 3971 Assemble(模拟 + 二分)
- UVALive 6833Miscalculation (模拟)
- UVALive - 6269 Digital Clock 模拟
- cocos2dx学习之路----第五篇(切换场景的另一种方式:使用popScene与pushScene)
- 图像分割简单处理
- android studio导入SlidingMenu的方法
- 016-Storm借助tick消息定时器统计统计周期性业务
- jquery动态改变form属性提交表单
- UVALive 5873 - Tree Inspections 【模拟】
- #HDU 1016 Prime Ring Problem 【DFS+溯回求组数】
- 多点移动电子地图定位
- nodejs爬取页面内容(utf8编码)
- form提交前验证的几种方法
- Codeforces 620D Lipshitz Sequence RMQ+二分
- 下载APP显示 服务器检索信息出错 ”RPC:S-7:AEC-0“等
- windows7_64+vs2013_32位配置PCL_1.6.0
- HTML一个form表单中有两个(多个)submit,后台如何区分(纯HTML实现,无需javascript)