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

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 ;
}