NC16593 铺地毯

铺地毯

https://ac.nowcoder.com/acm/problem/16593

题目:
为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
对于30%的数据,有n≤2;
对于50%的数据,有0≤a,b,g,k≤100;
对于100%的数据,有0≤n≤10,000,0≤a,b,g,k≤100,000。
思路:看到这题第一眼想的就是把每个矩形对应的点的值都变成编号,后来想应该是超时的,最后想到前从前往后存储矩阵坐标,当输入要找的坐标时再从后往前看这个点是不是在矩阵中,即可找到最后覆盖的矩阵,如果未找到输出-1即可
代码如下:
#include

using namespace std;
struct regular
{
int a,b,x,y;
};
regular a[10005]={0};
int main()
{
int n,i;
cin>>n;
for(i=0; i<n; i++)//储存矩阵坐标
{
cin>>a[i].a>>a[i].b>>a[i].x>>a[i].y;
a[i].x+=a[i].a;
a[i].y+=a[i].b;
}
int ansx,ansy,ok=0;//用OK判断找没找到地毯
cin>>ansx>>ansy;
for(i=n-1; i>=0; i--)
{
if(ansx<=a[i].x&&ansx>=a[i].a&&ansy>=a[i].b&&ansy<=a[i].y)//看这个点是不是在矩阵里
{
ok=1;
cout<<i+1;
break;
}
}
if(ok==0)cout<<'-1';
return 0;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务