码迷,mamicode.com
首页 > 其他好文 > 详细

题解 UVA11722 【Joining with Friend】

时间:2020-06-11 19:52:03      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:clu   相交   题目   scanf   http   题解   for   end   mes   

题目大意:a和b坐了两列不同的火车,且打算再车站会面。a车在$[t1,t2]$时间段等概率到达,b在$[s1,s2]$时间段等概率到达。火车停$w$分钟后出发。求碰面的概率。

解法简述

设a在x时间到达,b在y时间到达,即$|y-x|<=w$时可以碰面。即$x-w<=y<=x+w$
技术图片

(白书配图)

所求概率就是$S$阴$/S$总

这样问题变成了如何计算阴影部分的面积。

技术图片

阴影面积$=$橙色面积$-$蓝色斜线面积

问题转化成计算一条直线与矩形相交后求直线上方的面积。

技术图片

按照和矩形边的相交情况分为这六种(三组)。

左上,右下,(三角形&五边形,五边形就用矩形-三角形)

上下,左右,(梯形)

不相交&高于,不相交&低于。(0或矩形)

详见代码

代码部分

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
//const int N=;
double t1,t2,s1,s2,e;
double solve(int w){
	//y=x+w
	//上左
	if(s1<=t1+w&&t1+w<=s2&&s2<=t2+w)
		return (s2-(t1+w))*((s2-w)-t1)/2; 
	//上下
	if(t1+w<=s1&&s2<=t2+w)
		return (((s2-w)-t1)+((s1-w)-t1))*(s2-s1)/2; 
	//下右 
	if(t1+w<=s1&&s1<=t2+w&&t2+w<=s2)
		return (s2-s1)*(t2-t1)-(t2-(s1-w))*((t2+w)-s1)/2;
	//左右 
	if(s1<=t1+w&&t1+w<=s2&&s1<=t2+w&&t2+w<=s2)
		return ((s2-(t1+w))+(s2-(t2+w)))*(t2-t1)/2;
	//无交集 高于 
	if(s2<=t1+w) return 0;	
	//无交集 低于 
	if(t2+w<=s1) return (s2-s1)*(t2-t1); 
}
int main(){
	int t;
	scanf("%d",&t);
	for(int cas=1;cas<=t;cas++){
		scanf("%lf%lf%lf%lf%lf",&t1,&t2,&s1,&s2,&e);
		printf("Case #%d: %.8lf\n",cas,(solve(-e)-solve(e))/((s2-s1)*(t2-t1)));
	} 
	return 0;
}

题解 UVA11722 【Joining with Friend】

标签:clu   相交   题目   scanf   http   题解   for   end   mes   

原文地址:https://www.cnblogs.com/zdsrs060330/p/13095078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!