1083 - 矩形问题
时间限制 : 1 秒
内存限制 : 32 MB
现给你若干矩形,矩形的边都平行于x轴和y轴,请你编程计算被其他矩形包含在内部的矩形的个数(如果内部的矩形的边与外部的矩形的边重合,也算作正确的结果)。
题目输入
输入包含多组测试数据。每组输入第一行是一个整数n(n<=100),表示矩形个数。
接下来n行,每行输入四个实数,分别表示矩形的最小x坐标、最大x坐标、最小y坐标、最大y坐标。
题目输出
对于每组输入,输出被其他矩形包含在内部的矩形的个数。
输入/输出样例
输入格式
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
C语言解答
#include<stdio.h> struct R { double xmin,xmax,ymin,ymax; }r[10000]; int main() { int n,i,j,c; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%lf%lf%lf%lf",&r[i].xmin,&r[i].xmax,&r[i].ymin,&r[i].ymax); for(c=i=0;i<n;i++) for(j=0;j<n;j++) if(i!=j&&r[i].xmin>=r[j].xmin&&r[i].xmax<=r[j].xmax&&r[i].ymin>=r[j].ymin&&r[i].ymax<=r[j].ymax) { c++; break; } printf("%d\n",c); } return 0; }
C++解答
#include<stdio.h> struct R { double xmin,xmax,ymin,ymax; }r[10000]; int main() { int n,i,j,c; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%lf%lf%lf%lf",&r[i].xmin,&r[i].xmax,&r[i].ymin,&r[i].ymax); for(c=i=0;i<n;i++) for(j=0;j<n;j++) if(i!=j&&r[i].xmin>=r[j].xmin&&r[i].xmax<=r[j].xmax&&r[i].ymin>=r[j].ymin&&r[i].ymax<=r[j].ymax) { c++; break; } printf("%d\n",c); } return 0; }
Java解答
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt();double[][] a=new double[n][4]; for(int u=0;u<n;u++){ for(int w=0;w<4;w++){ a[u][w]=in.nextDouble(); } }int c=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i!=j&&a[i][0]>=a[j][0]&&a[i][1]<=a[j][1]&&a[i][2]>=a[j][2]&&a[i][3]<=a[j][3]) { c++; break; } } }System.out.println(c);}} }