UVA 11722 - Joining with Friend(概率)

本文解析了UVA11722-JoiningwithFriend问题,介绍了如何通过绘制图表来计算两人见面概率的方法,并给出了具体的C++实现代码。

UVA 11722 - Joining with Friend

题目链接

题意:你会在[t1,t2]时刻到,你朋友会在[s1,s2]时刻到,两个人都停留w,问两人碰面的概率

思路:概率题,画图,计算围成面积/总面积就是概率

代码:

#include <stdio.h>
#include <string.h>

int t;
double t1, t2, s1, s2, w;

double cal(double w) {
	double ly = t1 + w;
	double ry = t2 + w;
	double ux = s2 - w;
	double dx = s1 - w;
	if (ly >= s2) return 0;
	if (ry <= s1) return (t2 - t1) * (s2 - s1); 
	bool isleft = (ly >= s1 && ly <= s2);
	bool isright = (ry >= s1 && ry <= s2);
	bool isup = (ux >= t1 && ux <= t2);
	bool isdown = (dx >= t1 && dx <= t2);
	if (isleft && isup) return (ux - t1) * (s2 - ly) * 0.5;
	if (isleft && isright) return (s2 - ly + s2 - ry) * (t2 - t1) * 0.5;
	if (isdown && isright) return (t2 - t1) * (s2 - s1) - (t2 - dx) * (ry - s1) * 0.5;
	if (isdown && isup) return (ux - t1 + dx - t1) * (s2 - s1) * 0.5;
}

int main() {
	int cas = 0;
	scanf("%d", &t);
	while (t--) {
		scanf("%lf%lf%lf%lf%lf", &t1, &t2, &s1, &s2, &w);
		printf("Case #%d: %.7lf\n", ++cas, (cal(-w) - cal(w)) / (t2 - t1) /(s2 - s1));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值