CCF窗口

原题链接

链接: 官网链接

解题思路

  1. 整一个全局数组area,里面存放该位置处的最顶层的窗口编号;
  2. 整一个结构体数组window,结构体Window里存放每一个窗口的x1, y1, x2, y2;读入时遍历这一块area,将其设为窗口的编号;
  3. 对于每次鼠标点击的坐标(x,y),area[x][y]就是该位置最顶层的窗口编号了,直接输出area[x][y]即可,记得再遍历该窗口范围内的area,将其设为该窗口编号,就是进行一次覆盖的过程;

C/C++代码

#include<iostream>
using namespace std;
const int maxn = 2700;
int n,m;
int area[maxn][maxn];
struct Window{
	int x1;
	int y1;
	int x2;
	int y2;
}window[12];
int main(){
	fill(area[0], area[0]+maxn*maxn, 0);
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++){
		//将编号为i(1~n)的窗口范围存起来 
		scanf("%d%d%d%d",&window[i].x1,&window[i].y1,&window[i].x2,&window[i].y2);
		//将该窗口范围的area值设为窗口编号 
		for(int x=window[i].x1; x<=window[i].x2; x++){
			for(int y=window[i].y1; y<=window[i].y2; y++){
				area[x][y] = i;
			}
		}
	}
	int x,y,id;
	while(m--){
		scanf("%d%d",&x,&y);
		id = area[x][y];
		//area[x][y]即为答案 
		if(id == 0){
			printf("IGNORED\n");
		}
		else{
			printf("%d\n",id);
			//记得要用该窗口重新覆盖一遍,即设为顶层窗口的过程 
			for(int x=window[id].x1; x<=window[id].x2; x++){
				for(int y=window[id].y1; y<=window[id].y2; y++){
					area[x][y] = id;
				}
			}
		}
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值