#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int T,tt=0;
scanf("%d",&T);
while(T--)
{
int a[10],t1,t2,s1,s2,w,i,j,k,p,x,y;
double s=0,sum;//s记录非阴影面积
scanf("%d%d%d%d%d",&t1,&t2,&s1,&s2,&w);
a[0]=s1-t2;
a[1]=s2-t2;
a[2]=s1-t1;
a[3]=s2-t1;
sort(a,a+4);
sum=(t2-t1)*(s2-s1);
p=min(s2-s1,t2-t1);
if(-w<=a[0])
s+=0;
else if(-w<=a[1])
{
x=t2-s1-w;
y=t2-s1-w;
s+=0.5*x*y;
}
else if(-w<=a[2])
{
s+=0.5*p*p;
x=-w-a[1];
s+=x*p;
}
else if(-w<=a[3])
{
x=s2+w-t1;
y=s2+w-t1;
s+=(t2-t1)*(s2-s1)-0.5*x*y;
}
else
s+=(t2-t1)*(s2-s1);
//printf("%.6lf\n",s);
//
if(w>=a[3])
s+=0;
else if(w>=a[2])
{
x=s2-w-t1;
y=s2-w-t1;
s+=0.5*x*y;
}
else if(w>=a[1])
{
s+=0.5*p*p;
x=a[2]-w;
s+=x*p;
}
else if(w>=a[0])
{
x=t2-s1+w;
y=t2-s1+w;
s+=(t2-t1)*(s2-s1)-0.5*x*y;
}
else
s+=(t2-t1)*(s2-s1);
// printf("%.6lf %.6lf\n",sum,s);
printf("Case #%d: %.8lf\n",++tt,(sum-s)/sum);
}
return 0;
}
/*
以坐标(t1,s1),(t2,s2)作边平行于坐标轴的矩阵,再作直线y=x+w和y=x-w,它们之间与矩阵相覆盖的阴影面积占矩阵总面积比就是答案
方法:
过4个矩阵顶点作平行于y=x的直线,共分5个区域。分别根据w讨论y=x+w和y=x-w在哪个区域内,再计算非阴影面积,之后总面积减
非阴影面积再除以总面积就可得到答案
*/
UVA 11722 Joining with Friend 图形面积+概率
最新推荐文章于 2019-08-22 11:30:51 发布
本文探讨了如何通过几何方法计算矩阵中被特定直线分割的非阴影面积比例,详细解析了矩阵边界条件下的面积计算逻辑,并通过实例演示了解决类似问题的步骤。

1667

被折叠的 条评论
为什么被折叠?



