记录编号 85904 评测结果 AAAAAAAAAA
题目名称 [UVa 11722] 和朋友会面 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.024 s
提交时间 2014-01-15 21:47:52 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<iomanip>
#include<queue>
#include<set>
#include<map>
using namespace std;
double abovearea(double s1,double s2,double t1,double t2,double w){//直线x+w上方和矩形(t1,s1)(t2,s2)相交部分的面积
	double ly=t1+w,ry=t2+w;
	double ux=s2-w,dx=s1-w;
	double il=(s1<=ly&&ly<=s2),ir=(s1<=ry&&ry<=s2);
	double iu=(t1<=ux&&ux<=t2),id=(t1<=dx&&dx<=t2);
	double he=s2-s1,we=t2-t1;//高度和宽度
	if(id&&ir) return he*we-0.5*(t2-dx)*(ry-s1);
	if(id&&iu) return 0.5*he*(ux-t1+dx-t1);
	if(il&&ir) return 0.5*we*(s2-ly+s2-ry);
	if(il&&iu) return 0.5*(s2-ly)*(ux-t1);
	if(ly<=s1) return he*we;//完全在矩形下方
	else return 0;//完全在矩形上方
}
int main(){
	freopen("joining.in","r",stdin);
	freopen("joining.out","w",stdout);
	int T;
	scanf("%d",&T);
	double s1,t1,s2,t2,w,ans;
	for(int kase=1;kase<=T;kase++){
		scanf("%lf%lf%lf%lf%lf",&t1,&t2,&s1,&s2,&w);
		ans=(abovearea(s1,s2,t1,t2,-w)-abovearea(s1,s2,t1,t2,w))/((s2-s1)*(t2-t1));
		printf("Case #%d: %.6lf\n",kase,ans);
	}
	return 0;
}