【CCF-CSP】201403-2 窗口(模拟)

【CCF-CSP】201403-2 窗口

题目

先给出 n 个窗口(窗口的左边范围),之后有 m 次点击(即一个座标),每次点击输出当前座标最顶层的窗口序号,同时将当前窗口移动到最顶层。

分析

用链表存窗口的优先级,每次点击按照优先级遍历所有窗口,看自己在哪个窗口的范围,并将找到的窗口移动到链表的前端。

#include <bits/stdc++.h>
using namespace std;
#define d(x) cout<<x<<endl

typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 20;

int n, m;

struct node {
	int a, b, c, d;
} arr[N];

int main() {
	scanf("%d%d", &n, &m);
	list<int> l;
	for (int i = 1; i <= n; i++) {
		scanf("%d%d%d%d", &arr[i].a, &arr[i].b, &arr[i].c, &arr[i].d);
		l.push_front(i);
	}
	while (m--) {
		int x, y, flag = 0;
		scanf("%d%d", &x, &y);
		for (auto it = l.begin(); it != l.end(); it++) {
			if (x >= arr[*it].a && x <= arr[*it].c && y >= arr[*it].b && y <= arr[*it].d) {
				l.push_front(*it); l.erase(it);
				printf("%d\n", *it); flag = 1; break;
			} 
		}
		if (flag == 0) printf("IGNORED\n");
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章