UVa 11722(几何概率)

时间:2023-02-10 19:44:14

题意:你和你的朋友要乘坐火车,并且都会在A城市相遇,你会在(t1,t2)中的任意时刻以相同的概率密度到达,

        你朋友会在(s1,s2)中的任意时刻以相同的概率密度到达,你们的火车在A城市都会停留w分钟,只有在同一时刻你们的火车停留在A城市,你们才可能相见,

        问你们相见的概率为多少

题解:假设x是你到A站的时间,y是你朋友到达A站时间,那么只要满足|x-y|<=w;你和你的朋友便可以相见,这个就和我们高中的线性规划一样=x+w;y=x-w这两条直线在正方(t1,t2,s1,s2)所围成的长方形的面积

UVa 11722(几何概率)我们只要计算阴影面积就可以,就是用y=x+w围成的面积-y=x-w围成的面积,不过要分情况考虑,具体看代码

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<map>
 8 #include<set>
 9 #include<vector>
10 #include<cstdlib>
11 #include<string>
12 #define eps 0.000000001
13 typedef long long ll;
14 typedef unsigned long long LL;
15 using namespace std;
16 int t1,t2,s1,s2;
17 double sum;
18 double solve(int w){
19     double ans=0;
20     if(t2+w<=s1)return 0;
21     else if(t1+w>=s2)return sum;
22     if(t1+w>=s1&&t2+w>=s2){
23         ans=sum-0.5*(s2-t1-w)*(s2-t1-w);
24         return ans;
25     }
26     if(t1+w<=s1&&t2+w<=s2){
27         ans=0.5*(t2-s1+w)*(t2-s1+w);
28         return ans;
29     }
30     if(t1+w<=s1&&t2+w>=s2){
31         ans=0.5*(s2-s1)*(2*t2-s1-s2+2*w);
32         return ans;
33     }
34     if(t1+w>=s1&&t2+w<=s2){
35         ans=0.5*(t2-t1)*(t1+t2-2*s1+2*w);
36         return ans;
37     }
38 }
39 int main(){
40     int t;
41     int w;
42     scanf("%d",&t);
43     int Case=1;
44     while(t--){
45         scanf("%d%d%d%d%d",&t1,&t2,&s1,&s2,&w);
46         sum=1.0*abs(t1-t2)*abs(s1-s2);
47         double ans=solve(w)+solve(-w);
48         double t=solve(w)-solve(-w);
49         printf("Case #%d: %.8lf\n",Case++,t/sum);
50     }
51 }