题意

给出n个地毯(1~n)的大小及其左下角坐标,并且按地毯编号放置这n个地毯,求(x,y)点最上层地毯序号。(没有地毯则输出-1)

题解

要求最上层地毯,很容易想到按地毯放置顺序逆序遍历每个地毯是否为目标地毯,如果最终没有结果则输出-1。

代码

void solve()
{
	int n;
	cin >> n;
	vector<int> a(n), b(n), c(n), d(n);
	for(int i = 0; i < n; i++){
		cin >> a[i] >> b[i] >> c[i] >> d[i];
	}
	int x, y;
	cin >> x >> y;
	
	for(int i = n - 1; i >= 0; i--){
		if(x >= a[i] && x <= a[i] + c[i] && y >= b[i] && y <= b[i] + d[i]) return cout << i + 1, void();
	}
	cout << -1;
}