试题编号: | 201403-2 |
试题名称: | 窗口 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 输入格式 输入的第一行有两个正整数,即 N 和 M。(1 ≤ N ≤ 10,1 ≤ M ≤ 10) 输出格式 输出包括 M 行,每一行表示一次鼠标点击的结果。如果该次鼠标点击选择了一个窗口,则输出这个窗口的编号(窗口按照输入中的顺序从 1 编号到 N);如果没有,则输出"IGNORED"(不含双引号)。 样例输入 3 4 样例输出 2 样例说明 第一次点击的位置同时属于第 1 和第 2 个窗口,但是由于第 2 个窗口在上面,它被选择并且被置于顶层。 |
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <time.h>
#include <vector>
#include <list>
using namespace std;
//201403-2 窗口 map多维会报错
int main()
{
int i, j, M, N, X_In, Y_In, Level = 0, Data_Out = 0,Max_Level = 0;
//map<int, int[5]>Data; //前四个是窗坐标,最后代表层次顺序
map<int, int>Result;
cin >> N >> M;
vector<vector<int> >Data(N+1, vector<int>(5, 0));
Max_Level = N;
for (i = 1; i < N+1; i++)
{
cin >> Data[i][0] >> Data[i][1] >> Data[i][2] >> Data[i][3];
Data[i][4] = i; //1--N
}
for (j = 0; j < M; j++)
{
cin >> X_In >> Y_In;
for (i = 1; i < N + 1; i++)
{
if (Data[i][4] > Level)
{
if (Data[i][0] <= X_In && X_In <= Data[i][2] && Data[i][1] <= Y_In && Y_In <= Data[i][3])
{
Level = Data[i][4];
Data_Out = i;
}
}
}
Result[j] = Data_Out;
Max_Level++;
Data[Data_Out][4] = Max_Level;
Level = 0;
Data_Out = 0;
}
for (j = 0; j < M; j++)
{
if (Result[j] == 0)
cout << "IGNORED" << endl;
else
cout << Result[j] << endl;
}
cin >> N;
return 0;
}