洛谷P1003
程序员文章站
2022-03-21 08:28:51
...
洛谷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;
}
下一篇: STM32的串口通讯