本题思路
看完题之后又首先就想暴力入手,看了一眼数据,最大数据有10000,如果创建循环来做的的话,时间超限,所以不得不去想怎么让循环更小一点。
代码思路:
先将每个点的位置和编号,还有长方形的长和宽存起来,遍历时也要注意遍历顺序,需要从右上角向左下角遍历,如果题目 所求点的横坐标或纵坐标 < 当前枚举到长方形左下角点的横或纵坐标,则跳过当前枚举的长方形去向左下方去找长方形左下角横纵坐标 < 所求点横纵坐标的点
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 10010;
struct g{
int x, y, len, wid;
int num;
}g[N];
int T;
int main()
{
cin >> T;
for(int i = 1; i <= T; i ++)
{
cin >> g[i].x >> g[i].y >> g[i].len >> g[i].wid;
g[i].num = i;
}
int x, y;
cin >> x >> y;
for(int i = T; i >= 1; i --)
{
if(x < g[i].x || y < g[i].y) continue;
if(x - g[i].x <= g[i].len && y - g[i].y <= g[i].wid)
{
cout << g[i].num << endl;
return 0;
}
else continue;
}
return 0;
}