参考洛谷P1003 [NOIP2011 提高组] 铺地毯

50分代码:完全按照题目思维来写,超时

#include<iostream>
using namespace std;
int carpet[10001][10001];
int main() {
	int n;
	cin >> n;
	for(int m=1;m<=n;m++) {
		int a, b, g, k;
		cin >> a >> b >> g >> k;
		for (int i = a; i <= a + g; i++) {
			for (int j = b; j <= b + k; j++) {
				carpet[i][j] = m;
			}
		}
	}
	int x, y;
	cin >> x >> y;
	cout << carpet[x][y];
	return 0;
}

100分代码:(和题目反着来,要查地毯上最高铺着的是第几块地毯,就从最后一块地毯的范围倒着遍历)

#include<iostream>
using namespace std;
const int MAX = 1e5 + 5;
int a[MAX], b[MAX], g[MAX], k[MAX];
int main() {
	int n;
	cin >> n;
	int flag = 0;
	for(int i=1;i<=n;i++) {
		cin >> a[i] >> b[i] >> g[i] >> k[i];
	}
	int x, y;
	cin >> x >> y;
	for (int i = n; i >= 1; i--) {
		if (a[i] <= x && x <= a[i] + g[i] && b[i] <= y && y <= b[i] + k[i]) {
			cout << i;
			flag = 1;
			break;
		}
	}
	if (!flag) {
		cout << -1;
	}
	return 0;
}

我发现做题不能被题目思路误导,得自己想想本质。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐