/*
http://acm.pku.edu.cn/JudgeOnline/problem?id=1151
离散化方法
思想是将整个地图划分为最小的子方格,然后将子方格的面积相加即可得到最终结果
1)首先分别将输入数据的x坐标和y坐标保存到x和y数组里面,然后对这两个数组排序
2)然后遍历所有矩形,对于矩形(x1, y1)(x2, y2), 分别遍历x数组和y数组,对于所有
满足满足x1 <= x[i] <= x2 y1 <= y[j] <= y2的i, j将uniquePoint[i][j]设置为1,
表示这个点属于有效离散点,然后统计所有离散区间面积:
res += uniquePoint[i][j] * (x[i + 1] - x[i]) * (y[i + 1] - y[i])
*/
#include <iostream>
#include <algorithm>
#include <iomanip>
#define MAX_N 100
double x[MAX_N * 2 + 1];
double y[MAX_N * 2 + 1];
double recTangle[MAX_N + 1][4];
int uniquePoint[MAX_N * 2 + 1][MAX_N * 2 + 1];
int recNum;
using namespace std;
int main()
{
int i, j, caseNum = 0;
while(cin>>recNum && recNum != 0)
{
caseNum++;
for(i = 0; i < recNum; i++)
{
cin>>recTangle[i][0]>>recTangle[i][1]>>recTangle[i][2]>>recTangle[i][3];
x[i * 2] = recTangle[i][0];
x[i * 2 + 1] = recTangle[i][2];
y[i * 2] = recTangle[i][1];
y[i * 2 + 1] = recTangle[i][3];
}
memset(uniquePoint, 0, sizeof(uniquePoint));
sort(x, x + 2 * recNum);
sort(y, y + 2 * recNum);
for(i = 0; i < recNum; i++)
{
double x1 = recTangle[i][0], y1 = recTangle[i][1], x2 = recTangle[i][2], y2 = recTangle[i][3];
int px1, px2, py1, py2;
for(px1 = 0; px1 < recNum * 2; px1++)
{
if(x[px1] == x1)
break;
}
for(px2 = 0; px2 < recNum * 2; px2++)
{
if(x[px2] == x2)
break;
}
for(py1 = 0; py1 < recNum * 2; py1++)
{
if(y[py1] == y1)
break;
}
for(py2 = 0; py2 < recNum * 2; py2++)
{
if(y[py2] == y2)
break;
}
int p1, p2;
for(p1 = px1; p1 < px2; p1++)
{
for(p2 = py1; p2 < py2; p2++)
uniquePoint[p1][p2] = 1;
}
}
double res = 0;
for(i = 0; i < recNum * 2; i++)
for(j = 0; j < recNum * 2; j++)
res += uniquePoint[i][j] * (x[i + 1] - x[i]) * (y[j + 1] - y[j]);
cout<<"Test case #"<<caseNum<<endl;
printf("Total explored area: %.2f/n/n", res);
}
return 0;
}