CCF-CSP 201403-2 窗口
题目描述
思路
首先需要一个类来保存一个窗口的数据。点击操作时,从前到后遍历窗口,知道x,y坐标位于某个窗口中,将这个窗口拿出来排在最前面。(或者不存在这样的窗口,则点击被忽略)
代码
#include <bits/stdc++.h>
using namespace std;
string ign = "IGNORED";
class Window{
public:
int x1,x2,y1,y2,no;
Window(int _x1, int _y1, int _x2, int _y2,int _no) {
x1 = _x1;
y1 = _y1;
x2 = _x2;
y2 = _y2;
no = _no;
}
bool hit(int x, int y) {
return x1 <= x && x <= x2 && y1 <= y && y <= y2;
}
};
int main() {
int n; cin >> n;
int m; cin >> m;
vector<Window> windows;//下标小的位于底层
// 输入窗口
int i;
for (i = 0; i < n; i++) {
int x1; cin >> x1;
int y1; cin >> y1;
int x2; cin >> x2;
int y2; cin >> y2;
windows.push_back(Window(x1,y1,x2,y2,i+1));
}
// 点击窗口 m 次
int x,y,j;
bool hit_f;
for (i = 0; i < m;i++){
cin >> x; cin >> y;
hit_f = false;
for (j = n-1; j >= 0; j--){
if (windows[j].hit(x,y)) {
Window temp = windows[j];
windows.erase(windows.begin()+j);
windows.push_back(temp);
hit_f = true;
cout << temp.no << endl;
break;
}
}
if (!hit_f) {
cout << ign << endl;
}
}
return 0;
}