【题目描述】
输入n个矩形,求它们总共占地面积(也就是求一下面积的并)。
【输入描述】
可能有多组数据,读到n=0为止(不超过15组)。
每组数据第一行包含1个数n,表示矩形个数(n <= 100);
接下来n行每行4个实数x1、y1、x2、y1(0 <= x1 < x2 <= 100000,0 <= y1 < y2 <= 100000),表示矩形的左下角坐标和右上角坐标。
【输出描述】
对于每组数据输出一行表示答案。
【样例输入】
2
10 10 20 20
15 15 25 25.5
0
【样例输出】
180.00
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,k,f[201][201]; double ans,X[201],Y[201],i[201][5]; int main() { while (cin>>n) { if (!n) break; k=1; ans=0.0; memset(f,0,sizeof(f)); for (int a=1;a<=n;a++) { cin>>i[a][1]>>i[a][2]>>i[a][3]>>i[a][4]; X[k]=i[a][1]; Y[k]=i[a][2]; k++; X[k]=i[a][3]; Y[k]=i[a][4]; k++; } sort(X+1,X+n*2+1); sort(Y+1,Y+n*2+1); for (int k=1;k<=n;k++) { int A1,A2,B1,B2; for (A1=1;A1<=2*n;A1++) if (X[A1]==i[k][1]) break; for (A2=1;A2<=2*n;A2++) if (X[A2]==i[k][3]) break; for (B1=1;B1<=2*n;B1++) if (Y[B1]==i[k][2]) break; for (B2=1;B2<=2*n;B2++) if (Y[B2]==i[k][4]) break; for (int a=A1;a<A2;a++) for (int b=B1;b<B2;b++) f[a][b]=1; } for (int a=1;a<=n*2;a++) for (int b=1;b<=n*2;b++) ans+=f[a][b]*(X[a+1]-X[a])*(Y[b+1]-Y[b]); printf("%.2f ",ans); } return 0; }