欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷P1003

程序员文章站 2022-03-21 08:28:51
...

洛谷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;

}
相关标签: 洛谷题解 算法