本题思路

看完题之后又首先就想暴力入手,看了一眼数据,最大数据有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;
}