洛谷 p1003 铺地毯
洛谷p1003 铺地毯(简单模拟)
题意:输入点的坐标表示每一块地毯的覆盖区域。要求给定点的坐标,找到这个坐标上最上面一层的地毯序号。
思路:一开始想的是定义一个二位数组,通过二二维数组模拟地毯的覆盖情况,最后直接输出ans[i][j]即可,但题目中的数据范围是
会爆,所以这种思路不可行。然后再想通过比较点和地毯的左下角坐标和x、y轴的增量,判断坐标最上层的地毯编号(要从后向前比较)。
代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int num[10010][5];
int main()
{
int n;
int a,b,x,y;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d %d %d %d",&num[i][0],&num[i][1],&num[i][2],&num[i][3]);
}
scanf("%d %d",&x,&y);
int flag=0;
for(int i=n-1; i>=0; i--)
{
if(num[i][0]<=x&&x<=num[i][0]+num[i][2]&&num[i][1]<=y&&y<=num[i][1]+num[i][3])
{
flag=1;
printf("%d\n",i+1);
break;
}
}
if(!flag)
printf("-1\n");
return 0;
}
/**
3
1 0 2 3
0 2 3 3
2 1 3 3
2 2
3
3
1 0 2 3
0 2 3 3
2 1 3 3
4 5
-1
**/