洛谷P1003

洛谷P1003解

在这里插入图片描述
简单题,主要其实就是不能开到10的5次方的数组,所以不能想着用标记。
我的做法是用四个size为10010的一维数组来存各个地毯的左下角和右上角的坐标,这样就可以确定地毯的大小了。
到最后就是判断询问点的横纵坐标是否在当前地毯的范围内,是的话tag就更新,因为地毯是顺序放的,所以各个横纵坐标不需要判断是否覆盖,后面的一定是覆盖前面的。

#include<iostream>
#include<string.h>

using namespace std;

int main()
{
    ///记录地毯的大小坐标左下角和右上角
    int cax[10010];
    int cay[10010];
    int caxx[10010];
    int cayy[10010];
    //初始化,因为都是大于0的坐标,初始化为-1可以方便后面的判断
    memset(cax, -1, sizeof(cax));
    memset(caxx, -1, sizeof(caxx));
    memset(cay, -1, sizeof(cay));
    memset(cayy, -1, sizeof(cayy));
    int a, b, g, k;
    int n;
    int tag = 1;
    cin >> n;
    while(n > 0)
    {
        n--;
        cin >> a >> b >> g >>k;
        cax[tag] = a;
        cay[tag] = b;
        caxx[tag] = a + g;
        cayy[tag] = b + k;
        tag++;
    }
    int qx, qy; //询问点
    cin >> qx >> qy;
    tag = -1;
    for(int i = 1; i <= 10010; i++)
    {

       /* cout << cax[i] << " ";
        cout << caxx[i] << " ";
        cout << cay[i] << " ";
        cout << cayy[i] << endl;*/
        if((qx <= caxx[i] && qx >= cax[i]) && (qy >= cay[i] && qy <= cayy[i])) ///判断询问点是否在地毯内
            tag = i;
    }
    cout << tag << endl;

    return 0;

}
发布了5 篇原创文章 · 获赞 11 · 访问量 1033

猜你喜欢

转载自blog.csdn.net/Tony_Mak/article/details/104007117