Emma is not very tidy with the desktop of her computer. She has the habit of opening windows on the screen and then not closing the application that created them. The result, of course, is a very cluttered desktop with some windows just peeking out from behind others and some completely hidden. Given that Emma doesn’t log off for days, this is a formidable mess. Your job is to determine which window (if any) gets selected when Emma clicks on a certain position of the screen.
Emma’s screen has a resolution of 10 6 by 10 6. When each window opens its position is given by the upper-left-hand corner, its width, and its height. (Assume position (0,0) is the location of the pixel in the upper-left-hand corner of her desktop. So, the lower-right-hand pixel has location (999999, 999999).)
Emma’s screen has a resolution of 10 6 by 10 6. When each window opens its position is given by the upper-left-hand corner, its width, and its height. (Assume position (0,0) is the location of the pixel in the upper-left-hand corner of her desktop. So, the lower-right-hand pixel has location (999999, 999999).)
3 1 2 3 3 2 3 2 2 3 4 2 2 4 3 5 1 2 4 2 3 3 2 5 10 2 10 100 100 100 100 2 5 13 100 101 0
Desktop 1: window 3 window 1 background window 2 Desktop 2: background window 2
pixel是像素的意思,是块不是一个点。但可以转换成点。
这就简单了,我首先想到的是用map,但超时了,后来用链表做的,注意释放内存,不然会答案错误。最简单的方法是用线性表,因为题目里说了n<=100,也就是说不会超过100个数据。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<time.h>
using namespace std;
struct Node
{
int x,y;
int x1,y1;
int g;
Node*next;
};
int main()
{
int n,m;
int x,y,w,h;
Node* p;
int cnt=0;
while(~scanf("%d",&n)&&n)
{
//clock_t beg=clock();
cnt++;
Node* L=(Node*)malloc(sizeof(Node));
L->next=NULL;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d%d",&x,&y,&w,&h);
Node*s=(Node*)malloc(sizeof(Node));
s->g=i;
s->x1=x+h-1;
s->y1=y+w-1;
s->x=x;
s->y=y;
s->next=L->next;
L->next=s;
}
scanf("%d",&m);
int flag=0;
printf("Desktop %d:\n",cnt);
while(m--)
{
scanf("%d%d",&x,&y);
p=L->next;
flag=0;
while(p!=NULL)
{
//printf("*******%d\n",p->g);
if(p->x<=x&&p->x1>=x&&p->y<=y&&p->y1>=y)
{
printf("window %d\n",p->g);
flag=1;
break;
}
p=p->next;
}
if(flag==0)
{
printf("background\n");
}
}
Node *pre=L;
p=L->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=p->next;
}
free(pre);
//clock_t end=clock();
//cout<<"runtime="<<end-beg<<endl;
}
return 0;
}