#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> #define N 405 using namespace std; int flg[N],sum[4*N],X[N]; int k,u,mid,c,t; struct node{ int flag; double lx,rx,y; node(){} node(double a,double b,double c,int d){ lx=a,rx=b,y=c,flag=d; } bool operator < (node b)const{ return y<b.y; } }line[N]; void push_up(int u,int l,int r){ if(flg[u]) sum[u]=X[r+1]-X[l]; else if(l==r) sum[u]=0; else sum[u]=sum[u<<1]+sum[u<<1+1]; } void updat(int u,int l,int r,int tl,int tr,int c){ if(tl<=l&&r<=tr){ flg[u]+=c; push_up(u,l,r); return; } int mid=(l+r)>>1; updat(u<<1,l,mid,tl,tr,c); updat(u<<1+1,mid,r,tl,tr,c); push_up(u,l,r); } int main(){ int n,a,b,i; int cnt=1; while(scanf("%d",&n)&&n){ int num=0; memset(sum,0,sizeof(sum)); memset(flg,0,sizeof(flg)); double x1,x2,y1,y2; for(i=0;i<n;i++){ scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); num++,line[num]=node(x1,x2,y1,1),X[num]=x1; num++,line[num]=node(x1,x2,y2,-1),X[num]=x2; } sort(line+1,line+num+1); sort(X+1,X+1+num); double ans=0; for(i=0;i<num;i++){ int l=lower_bound(X+1,X+1+num,line[i].lx)-X; int r=lower_bound(X+1,X+1+num,line[i].rx)-X-1; updat(1,1,num,l,r,line[i].flag); ans+=sum[1]*(line[i+1].y-line[i].y); } printf("Test case #%d\n",cnt++); printf("Total explored area: %.2lf\n\n",ans); } return 0; }