201403-2窗口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>

int main(){
	
	int N,M,w[11][4],c[11];                                     //window[窗口号][]0表示x1,1表示y1,2表示x2,3表示y2
	
	scanf("%d%d",&N,&M);
	
	for(int i = 1; i < N+1;i++){     
		c[i] = i;                                               //c[层数]=窗口号
	} 

	for(int i=1;i<N+1;i++){                                     //存储各窗口坐标 
		scanf("%d%d%d%d",&w[i][0],&w[i][1],&w[i][2],&w[i][3]);
	}                                                           //此时第N层c[N]窗口号是N 
	
	int p[M],count=0,flag;                                      //输出数组 
	for(int i = 1; i <= M; i++){                                //M个坐标 
		
		int x,y,l,ii;                                           //location层数  
		scanf("%d%d",&x,&y);                                    //得到输入坐标 
		
		flag = 0;		
		for( ii = N; ii > 0; ii --) {                           //从第N层(顶层)开始判断 处于顶层的窗口号是 c[ii] 
			if(x >= w[ c[ii] ][ 0 ] && x <= w[ c[ii] ][ 2 ]
			 && y >= w[ c[ii] ][ 1 ] && y <= w [ c[ii] ][ 3 ]){ //若属于这一层 
				
				l = c[ii];
				p[ count++ ] = l;      
				flag = ii;                                      //做个标记,为下面判断层数使用 
				ii = 0;                                         //找到则将ii置零,跳出for循环 
			} 
		}
		
		if(flag == 0){                                          //说明不在任何一个窗口 
			p[count++]=0;                                       //用0做标记 输出时判断 是0则输出IGNORED 
		}
		else{                                                   //重新调整窗口位置   
			while( flag < N){                                   //将从flag+1层~最顶层的窗口都下移一层 
		    	c[flag] = c[flag+1];
		    	flag++;
			}
			c[N] = l;                                           //最顶层置为刚刚访问到的这层 
		} 
	} 
	
    for(int i=0;i<M;i++){                                       //输出M个结果 
    	if(p[i]!=0){                                            
    		printf("%d\n",p[i]);
		}
		else printf("IGNORED\n");
	}

	return 0;
}

欢迎交流指导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值