---恢复内容开始---
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=31471
题意,两辆火车,分别会在[t1,t2],[s1,s2]的时间段停留在同一个站点w分钟,问两辆火车能够在这个站点相遇的概率。
思路,枚举每一种情况,把两辆火车的相交区间画出来,然后求都在这个区间的概率
#include"iostream" #include"cstdio" #include"cmath" using namespace std; int ca; double t1,t2,s1,s2,w,ans; double caculate(double b) { int y1=t1+b,y2=t2+b; if(y2<s1) return 0; if(y1<s1) { if(y2<s2) return 0.5*(y2-s1)*(y2-s1); else return 0.5*(s2-s1)*(2*y2-s1-s2); } if(y1<s2) { if(y2<s2) return 0.5*(t2-t1)*(y1-s1+y2-s1); else return (t2-t1)*(s2-s1)-0.5*(s2-y1)*(s2-y1); } return (t2-t1)*(s2-s1); } void Init() { scanf("%lf%lf%lf%lf%lf",&t1,&t2,&s1,&s2,&w); } void Work() { ans=(caculate(w)-caculate(-w))/((t2-t1)*(s2-s1)); } void Print() { printf("Case #%d: %.8f ",ca++,ans); } int main() { int T; ca=1; cin>>T; while(T--) { Init(); Work(); Print(); } return 0; }
---恢复内容结束---