zoukankan      html  css  js  c++  java
  • 题解 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了……

  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309186.html
Copyright © 2011-2022 走看看