luogu1003:铺地毯:逆向查找:NOIP2011提高组T1
程序员文章站
2024-03-20 12:12:28
...
题目链接:该题是luogu试炼场的2-1:T1
试炼场2-1题解包:
2-1 | 简单模拟 | |
题号 | 题目 | 备注 |
1003 | 铺地毯 | 逆向查找 |
1067 | 多项式输出 | 分段模拟 |
1540 | 机器翻译 | 循环队列 |
1056 | 排座椅 | 统计排序 |
1328 | 生活大爆炸版石头剪刀布 | 暴力模拟 |
1563 | 玩具谜题 | 环形思维 |
题目大意:
在平面直接坐标系内,有n块方形地毯,依次铺上去,求某个点最上面一层的地毯编号
解题思路:
1 主要了解平面直角坐标系,用桶来做的话,数组没办法开;
2 反向模拟就可以了:从最后一块地毯往前数,先覆盖到该点的,就是答案!
上代码:
//luogu试炼场2-1:1:1003:铺地毯
//2011提高组T1:逆向查找
#include<cstdio>
int n,x,y;
int a[10005],b[10005];//地毯左下角的坐标(a,b);
int g[10005],k[10005];//地毯右上角的坐标(g,k);
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)//存储四个角的信息
{
scanf("%d %d %d %d",&a[i],&b[i],&g[i],&k[i]);
g[i]+=a[i];
k[i]+=b[i];
}
scanf("%d %d",&x,&y);//目标点
for(int i=n;i>=1;i--)//逆向查找,只要在框内,就结束了
{
if(x>=a[i]&&x<=g[i]&&y>=b[i]&&y<=k[i])
{
printf("%d",i);
return 0;
}
}
printf("-1");
return 0 ;
}