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;
}