• 题解 UVA11722 【Joining with Friend】


    题目大意: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
    ",cas,(solve(-e)-solve(e))/((s2-s1)*(t2-t1)));
        } 
        return 0;
    }

    cz-2006 AFO的阴影从未离开,再不努力明天就AFO了……

  • 相关阅读:
    如何在宿主机上查看kvm虚拟机的IP
    virt-viewer 连kvm 虚机
    用virsh console vhosts 卡住
    sshpass 实现shell脚本直接加载密登录服务器
    maven创建helloword项目
    linux 安装maven
    xz -d Python-3.4.7.tar.xz
    查看哪个用户登录过服务器 记录 时间 和 ip
    两台linux服务器各有两个不同的用户 其中一个服务器可以无密码登录服务器
    maven私服nexus
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309186.html
Copyright © 2020-2023  润新知