POJ 1468 Rectangles【矩形】

                                     POJ 1468 Rectangles

                                                        http://poj.org/problem?id=1468

题意

 给你n个边平行于坐标轴的矩形,问你有多少个矩形被其他矩形包含?(两个矩形重叠的话也算相互包含)

输入

多组输入,输入至文件结束。每组输入整数t( t<=5000)。表示这组有t个矩形,接下来有t行数据,每行4个整数,分别表示这个矩形四个顶点中的最小x坐标,最大x坐标,最小y坐标,最大y坐标,即xmin,xmax,ymin,ymax。

输出

每组测试对应一个整数,表示有多少个矩形被其他矩形包含。

样例输入

3
100 101 100 101
0 3 0 101
20 40 10 400
4
10 20 10 20
10 20 10 20
10 20 10 20
10 20 10 20

样例输出

0
4

分析

只要判断一个矩形的4个点是否都在另一个矩形内就行:只要该点的x和y坐标在这个矩形的[XMIN,XMAX]和[YMIN,YMAX]区间即可,具体看程序。

C++程序

#include<iostream>

using namespace std;

const int N=5005;

struct Rec{
	int xmin,ymin,xmax,ymax;
	Rec(){}
}r[N];

//查看第i个矩形是否在第j个矩形中 
bool check(int i,int j)
{
	bool flag=r[j].xmin<=r[i].xmin&&r[i].xmax<=r[j].xmax&&r[j].ymin<=r[i].ymin&&r[i].ymax<=r[j].ymax;
	return flag;
}

int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		for(int i=0;i<n;i++)
		  scanf("%d%d%d%d",&r[i].xmin,&r[i].xmax,&r[i].ymin,&r[i].ymax);
		int ans=0;
		for(int i=0;i<n;i++)
		  for(int j=0;j<n;j++)
		  {
		  	if(i==j) continue;
		  	if(check(i,j))
		  	{
		  		ans++;
		  		break;
			}
		  }
		printf("%d\n",ans);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/SongBai1997/article/details/85018532