ZOJ - 2480 Simplest Task in Windows

本文探讨了一个简单的Windows平台操作问题,即通过鼠标点击确定特定窗口。包括输入和输出规范,以及如何实现解决方案的详细分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu

 Status

Description

A typical windows platform may have several windows on the desktop. A user's operation may be as simple as a single click of the mouse. In the implementation of such a windows platform, one of the simplest tasks would be deciding which window had been clicked.

Given a serial of windows, for each mouse click, decide which window had been clicked. Please notice that windows may overlap, and the window on top would receive the click rather than others. And, we consider a window to be clicked even if the mouse is just on its edge/corner. For the sake of simplicity, we assume that a window will not be activated to the top by any click.


Input

The first part of input is a serial of windows. First an integer N (1 <= N <= 10) is given, indicating the number of windows. Then N lines follow, each containing four integers, x1, y1, x2, y2, (x1 < x2, y1 < y2) the coordinates of the upper-left and lower-right corners of a window. The windows are given in back-to-front order. N=0 signals the end of input.

The second part of input is a serial of mouse clicks. First an integer M (1 <= M <= 50) is given, indicating the number of mouse clicks. Then M lines follow, each containing two integers, x and y, the coordinates of a mouse click.


Output

For each mouse click in the input, output a single line containing the index (starting from 0) of the window which receives the click. If there is no such window, output "-1" in a line instead.


Sample Input

1
0 0 5 5
3
4 1
5 1
6 1
0


Sample Output

0
0
-1


Source

Zhejiang Provincial Programming Contest 2005
 
 
 
 
分析:
水题。注意矩形的输入顺序是与序号相反的。The windows are given in back-to-front order.
ac代码:
#include <iostream>
#include<cstdio>
using namespace std;
struct a
{
    int x1,x2,y1,y2;
}a[11];
struct b
{
    int x,y;
}b[51];
int main()
{
    int n,m,i,j;
    while(scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
        scanf("%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
        scanf("%d",&m);
        for(i=0;i<m;i++)
        scanf("%d%d",&b[i].x,&b[i].y);
        for(i=0;i<m;i++)
        {
                for(j=n-1;j>=0;j--)//注意矩形的输入顺序是与序号相反的。The windows are given in back-to-front order.
            {
                if(a[j].x1<=b[i].x&&a[j].x2>=b[i].x&&a[j].y1<=b[i].y&&a[j].y2>=b[i].y)
                {
                    printf("%d\n",j);
                    break;
                }
            }
            if(j==-1)
            printf("-1\n");
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值