#include <iostream>
#include <cstdlib>
using namespace std;
int sum = 0;
int n, x, y;
int a[100], b[100], g[100], k[100];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> b[i] >> g[i] >> k[i];
}
cin >> x >> y;
for (int i = 1; i <= n; i++) {
if (a[i] <= x && b[i] <= y && a[i] + g[i] >= x && b[i] + g[i] >= y)
sum = i;
}
if (sum == 0)
cout << -1;
cout << sum;
system("pause");
return 0;
}
帮你改了一下,洛谷上面测了可以过
#include <iostream>
using namespace std;
int n, x, y;
int a[100001], b[100001], g[100001], k[100001];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i] >> b[i] >> g[i] >> k[i];
}
cin >> x >> y;
for (int i = n; i >= 1; i--) {//建议你倒过来找,这样找到的第一个就是最上面的那一个,就可以直接输出了
if (a[i]<=x&&b[i]<=y&&(a[i]+g[i]>=x)&&(b[i]+k[i]>=y)) {
cout << i;
return 0;
}
}
cout << -1;
return 0;
}
这个判断有问题: (a[i] <= x && b[i] <= y && a[i] + g[i] >= x && b[i] + g[i] >= y)
g和k表示x和y上的长度,那么 应该是
(a[i] + g[i] - 1) >= x
(b[i] + k[i] - 1) >= y
比如某个地毯的数据 (1,1, 3,4),那么x的范围(1-3), y的范围(1-4)。
代码中的错误点有两个,一是范围变大了一格,二是y的上限用g[i]计算,而不是用k[i].