记录编号 |
85904 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[UVa 11722] 和朋友会面 |
最终得分 |
100 |
用户昵称 |
cstdio |
是否通过 |
通过 |
代码语言 |
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;
}