CCF201403-2 窗口

CCF201403-2 窗口

题目:

题目分析:

模拟窗口被点击的然后置于顶层。

1.对于每一个窗口,设置窗口编号,坐标(x1,y1),(x2,y2),窗口优先级。

2.模拟每一次点击,判断是否在某一个窗口中,如果在多个窗口中,需要确定优先级最大的窗口。

3.输出处理:如果没有点击到任何一个窗口,则输出IGNORED;

                     反之,需要把点击到的窗口置顶并且原本优先级比它高的其他窗口需要降低一个优先级。

 

代码如下,有详细注解:

#include<iostream>
using namespace std;
int n,m;
struct node{
	int index,x1,y1,x2,y2,crate;//窗口编号,坐标(x1,y1),(x2,y2),窗口优先级 
}a[15];  
int main(){
	cin>>n>>m; 
	a[0].crate=0; //设置初始窗口(即理解为桌面)优先级最低 
	for(int i=1;i<=n;i++){
		a[i].index=i;  //给窗口编号 
		cin>>a[i].x1>>a[i].y1>>a[i].x2>>a[i].y2; //输入坐标 
		a[i].crate=i; //按输入顺序设置优先级 
	}
	while(m--){ //处理m个点击点(x,y) 
		int x=0,y=0,b[15],index=0,Max=0;//初始化,初始窗口Max(桌面) 
		for(int i=0;i<15;i++)b[i]=0; 
		cin>>x>>y;
		for(int i=1;i<=n;i++){ //判断(x,y)是否在某一个窗口中 
			if(x>=a[i].x1&&x<=a[i].x2&&y>=a[i].y1&&y<=a[i].y2){//点在窗口i中 
				if(a[i].crate>a[Max].crate) //Max记录优先级最高的窗口 
					Max=a[i].index;	
			}
		}
		if(Max==0)cout<<"IGNORED"<<endl;//Max没有改变,说明输入点没有在任何一个窗口中 
		else { //Max被改变 
			for(int i=1;i<=n;i++) //重新设置优先级,所有优先级比Max高的优先级都-1 
				if(a[i].crate>a[Max].crate)a[i].crate--;
			a[Max].crate=n; //把窗口Max置顶 
			cout<<Max<<endl;
		}
	}
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值