UVA 11722 Joining with Friend【概率】

题意:

给定两个人火车到站的时间范围,以及火车的停留时间,问两个人相遇的概率。

分析:

好经典的高中数学题(?)
放在坐标系中,即转化为区域 |yx|w 与横坐标 [t1,t2| ,纵坐标 [s1,s2] 围成的矩形区域的面积交是多少。
两条直线与矩形边围成的阴影区域面积不好算,而阴影面积之外的区域基本都是三角形或者梯形,好算很多,所以我们对 w <script type="math/tex" id="MathJax-Element-275">w</script>进行分类讨论,直接求出阴影外的面积,用总面积减一下即可。
没啥难度,就是分类讨论这里需要想清楚。

代码:

/*************************************************************************
    > File Name: 11722.cpp
    > Author: jiangyuzhu
    > Mail: 834138558@qq.com 
    > Created Time: 2016/8/1 10:12:23
 ************************************************************************/

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
int main (void)
{
    int T;
    scanf("%d", &T);
    double s1, s2, t1, t2, w;
    for(int tt = 1; tt <= T; tt++){
        //cin>>t1>>t2>>s1>>s2>>w;
        scanf("%lf%lf%lf%lf%lf", &t1, &t2, &s1, &s2, &w);
        double tot = (t2 - t1) * (s2 - s1);
        double sum = 0;
        if(t1 + w < s2 && t1 + w >= s1){
            if(t2 + w >= s2) sum += 0.5 * (s2 - t1 - w) * (s2 - t1 - w);
            else sum += 0.5 * (s2 - t2 - w + s2 - t1 - w) * (t2 - t1);
        }else if(t1 + w >= s2 ) sum += 0;
        else {
            if(t2 + w > s2){
                sum += 0.5 * (s2 - s1) * (s1 - w - t1 + s2 - w - t1);
            }else if(t2 + w <= s2 && t2 + w > s1){
                sum += tot - 0.5 * (t2 + w - s1) * (t2 + w - s1);
            }else sum += tot;
        }
        if(t2 - w <= s1) sum += 0;
        else if(t2 - w > s1 && t2 - w <= s2){
            if(t1 - w <= s1) sum += 0.5 * (t2 - w - s1) * (t2 - w - s1);
            else  sum += 0.5 * (t2 - t1) * (t2 - w - s1 + t1 - w - s1);
        }else if(t2 - w > s2){
            if(t1 - w <= s1) sum += (t2 - s1 - w + t2 - s2 - w) * (s2 - s1) * 0.5;
            else if(t1 - w > s1 && t1 - w < s2){
                sum += tot - 0.5 * (s2 - t1 + w) * (s2 - t1 + w);
            }else sum += tot;
        }
        printf("Case #%d: %.10f\n", tt, (tot - sum) / tot);
    }
    return 0;
}
Collectors.joining() 是Java 8中的一个流收集器方法,用于将流中的元素拼接成一个字符串。该方法可以接受可选的前缀和后缀,并可以指定拼接字符串的分隔符。\[1\]通过使用Collectors.joining()方法,可以更优雅地连接字符串,实现函数式编程的方式。\[3\]例如,可以将一个字符串列表转换为逗号拼接的字符串,或者将其拼接成形如\[x, y, z\]或x | y | z的形式。\[3\]可以根据需要自由配置分隔符、前缀和后缀字符串。\[3\] #### 引用[.reference_title] - *1* [Collectors.joining()](https://blog.csdn.net/L_fly_J/article/details/120097000)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [03、Java 8 - Collectors.joining() 详解](https://blog.csdn.net/qq_33291299/article/details/128550458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java8中字符串连接(join)收集器 Collectors.joining](https://blog.csdn.net/CharlesYooSky/article/details/114698837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值