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