UVALive 5873 - Tree Inspections 【模拟】

本文探讨了在给定树形坐标与路径网络中,如何通过排序与遍历算法判断特定条件下树是否可见于路径的问题。通过实现一种高效算法,确保最终可见的树数量不低于总树数的60%,并提供了实例代码演示。

题目大意:给你一堆树的坐标,然后给你一些横着的路和竖着的路,一棵树如果横着或者竖着可以在没有其他树阻挡的情况下看到一条路,这棵树就是“好的”,问最后“好的”树能否不小于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;
}


### 软件开发中的检查 在软件开发过程中,检查(Inspections)是一种重要的质量控制手段。这类活动通常涉及对文档、代码或其他工作产品的审查,旨在发现潜在错误并提高产品质量。 #### 定义与目的 检查是指由一组人员通过评审来识别缺陷的过程[^2]。其主要目标是在早期阶段捕捉到问题,从而减少后期修复的成本和时间消耗。这不仅限于代码本身,还包括需求规格说明书、设计文件等各种形式的工作成果。 #### 实施方式 为了有效地执行这些检查,团队成员会遵循特定的方法论来进行评估。常见的做法包括同行评审(Peer Review),其中开发者之间互相审核彼此编写的材料;以及正式的技术审查(Formal Technical Reviews, FTRs)[^2],这是一种更为结构化的流程,涉及到更多参与者,并且有明确的角色分配如主持人、记录员等角色设定。 #### 工具支持 随着技术进步,在现代实践中也出现了许多辅助工具用于自动化部分检验过程或者增强人工判断能力。静态分析工具可以自动扫描源码寻找常见编程失误模式;而动态测试框架则允许运行应用程序实例以验证行为是否符合预期[^1]。 ```python def perform_inspection(codebase): """ Perform an inspection on the given codebase. Args: codebase (str): Path to the project directory containing source files Returns: list: A collection of issues found during the review process """ issues = [] # Static Analysis using linters or similar tools static_issues = run_static_analysis(codebase) issues.extend(static_issues) # Dynamic Testing with unit tests and integration tests dynamic_issues = execute_testsuite() issues.extend(dynamic_issues) return issues ``` #### 应用场景 除了上述提到的应用外,当企业面临安全合规性要求时,定期的安全审计也是一种特殊的检查形式。它专注于确保信息系统按照既定标准操作,保护敏感数据免受未授权访问威胁[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值