模拟法。
思路:
-
用 g[N][5] 存储 输入的坐标和窗口 id。g[][0]~g[][3] 存坐标,g[][4]存id。
-
因为输入是窗口是按顺序输入的,所以每次点击,从后往前判断点击到了那个窗口。
-
找到点击的窗口后,输出窗口 id: g[][4]。如果没有点击到任何窗口,输出
IGNORED
。 -
调整窗口顺序,点击的窗口放到最前面,其他的依次往后移动。
代码:
#include <iostream>
using namespace std;
const int N = 15;
int n;
int g[N][5];
void get(int x, int y)
{
for(int i = n; i > 0; i--)//从后往前判断点击的是那个窗口
{
if(g[i][0] <= x && g[i][1] <= y && g[i][2] >= x && g[i][3] >= y)//找到点击的窗口
{
cout << g[i][4] << endl;//输出 id
int t[5];//接下来的是调整窗口
for(int j = 0; j < 5; j++)
t[j] = g[i][j];
for(int j = i; j < n; j++)
{
for(int k = 0; k < 5; k++)
g[j][k] = g[j + 1][k];
}
for(int j = 0; j < 5; j++)//调整窗口
g[n][j] = t[j];
return ;
}
}
cout << "IGNORED" << endl;
}
int main()
{
cin >> n;
int m;
cin >> m;
for(int i = 1; i <= n; i++)
{
cin >> g[i][0] >> g[i][1] >> g[i][2] >> g[i][3];//输出坐标
g[i][4] = i;//存入 id
}
while(m--)
{
int x, y;//点击的位置
cin >> x >> y;
get(x, y);
}
return 0;
}
有问题直接评论即可,求点赞。
666
赞