题意:
      有一个车站,两个人想要在这个车站见面,第一个人会在t1到t2之间的任意一个时刻到(时间上任意一点概率一样),并且停留w时间,第二个人是s2到s2的时间段到,停留也是w,问两个人的见面概率是多少?

思路:
      这个应该算是个比较经典的问题了吧,感觉在那看到过,我们建立一个直角坐标系,t1<=x<=t2 ,s1<=y<=s2这样构成的这个矩形就是所有的概率区间,然后画一条x=y的直线,然后把这个直线沿着x=y方向想下和向上平移w得到一个区间,这个区间和句型重叠的部分就是见面的概率区间,用这个面积除以矩形的面积就是见面概率,求面积的时候我的方法比较笨,y=x+w,y=x-w这两条直线分别和四条线段求交点,然后在根据得到的四个交点的位置分布,枚举求出答案,我写的比较麻烦!

#include<stdio.h>
#include<string.h>

int main ()
{
   double t1 ,t2 ,s1 ,s2 ,w ,x ,y;
   double x1 ,x11 ,y1 ,y11;
   double x2 ,x22 ,y2 ,y22;
   int mark1[5] ,mark2[5];
   int t ,cas = 1;
   scanf("%d" ,&t);
   while(t--)
   {
      scanf("%lf %lf %lf %lf %lf" ,&t1 ,&t2 ,&s1 ,&s2 ,&w);
      int mk = 0; 
      memset(mark1 ,0 ,sizeof(mark1));
      memset(mark2 ,0 ,sizeof(mark2));
      // 1
      y = t1 + w;
      if(y >= s1)
      {
         if(y >= s2) y = s2;
         if(mk <= 2)
         if(mk == 0) x1 = t1 ,y1 = y;
         else x11 = t1 ,y11 = y;
         mark1[1] = 1;
         mk ++;
      }
       //4
      x = s1 - w;
      if(x >= t1)
      {
         mark1[4] = 1;
         if(x >= t2) x = t2;
         if(mk <= 2)
         if(mk == 0) x1 = x ,y1 = s1;
         else x11 = x ,y11 = s1;
         mk ++;
      }
      
      //3
      y = t2 + w;
      if(y <= s2)
      {
         mark1[3] = 1;
         if(y < s1) y = s1;
         if(mk <= 2)
         if(mk == 0) x1 = t2 ,y1 = y;
         else x11 = t2 ,y11 = y;
         mk ++;
      }
      //2
      x = s2 - w;
      if(x <= t2)
      {
         mark1[2] = 1;
         if(x < t1) x = t1;
         if(mk <= 2)
         if(mk == 0) x1 = x ,y1 = s2;
         else x11 = x ,y11 = s2;
         mk ++;
      }
     
      
      
      mk = 0; 
      // 1
      y = t1 - w;
      if(y >= s1)
      {
         mark2[1] = 1;
         if(y >= s2) y = s2;
         if(mk <= 2)
         if(mk == 0) x2 = t1 ,y2 = y;
         else x22 = t1 ,y22 = y;
         mk ++;
      }
      
      //4
      x = s1 + w;
      if(x >= t1)
      {
         mark2[4] = 1;
         if(x >= t2) x = t2;
         if(mk <= 2)
         if(mk == 0) x2 = x ,y2 = s1;
         else x22 = x ,y22 = s1;
         mk ++;
      }
      //3
      y = t2 - w;
      if(y <= s2)
      {
         mark2[3] = 1;
         if(y < s1) y = s1;
         if(mk <= 2)
         if(mk == 0) x2 = t2 ,y2 = y;
         else x22 = t2 ,y22 = y;
         mk ++;
      }
      //2
      x = s2 + w;
      if(x <= t2 )
      {
         mark2[2] = 1;
         if(x < t1) x = t1;
         if(mk <= 2)
         if(mk == 0) x2 = x ,y2 = s2;
         else x22 = x ,y22 = s2;
         mk ++;
      }
      
      
      if(x1 == x11 && y1 == y11 && x2 == x22 && y2 == y22 && x1 ==x2 && y1 == y2)
      {
         printf("Case #%d: 0.00000000" ,cas ++);
         continue;
      }
      double m1 ,m2;
      double m = (t2 - t1) * (s2 - s1);
      if(mark1[1] && mark1[2]) m1 = (s2 - y1) * (x11 - t1) / 2;
      else if(mark1[1] && mark1[3]) m1 = ((s2 - y1) + (s2 - y11)) * (t2 - t1) / 2;
      else if(mark1[4] && mark1[2]) m1 = ((x1 - t1) + (x11 - t1)) * (s2 - s1) / 2;
      else if(mark1[4] && mark1[3]) m1 = m -  (y11 - s1) * (t2 - x1) / 2;
      
      if(mark2[1] && mark2[2]) m2 =  m - (s2 - y2) * (x22 - t1) / 2;
      else if(mark2[1] && mark2[3]) m2 = m - ((s2 - y2) + (s2 - y22)) * (t2 - t1) / 2;
      else if(mark2[4] && mark2[2]) m2 = m - ((x2 - t1) + (x22 - t1)) * (s2 - s1) / 2;
      else if(mark2[4] && mark2[3]) m2 = (y22 - s1) * (t2 - x2) / 2;
      
      double Ans = (m - (m1 + m2)) / m;
      printf("Case #%d: %.8lf\n" ,cas ++ ,Ans);
      
   }
   return 0;
}

UVA11722(见面概率)相关推荐

  1. 两人约定见面的概率问题解法

    两人相约在早晨7点到8点之间在某处见面,先到者等候10分钟,过时不等侯.求两人能见面的概率 如下图所示: 直线y=x表示两人同时到达,线上侧绿色区域表示甲先到.乙在10分钟能到区域,线下黄色区域表示乙 ...

  2. 两个人约好12:00-13:00之间见面,先到的人等后到的人不超过15分钟,等待时间超过15分钟,先到的人会离去,问两人相遇的概率。

    两个人约好12:00-13:00之间见面,先到的人等后到的人不超过15分钟,等待时间超过15分钟,先到的人会离去,问两人相遇的概率. 设两个人到达的时间分别为x,y.将12:00~13:00这个时间段 ...

  3. 两个人约定7:00-8:00见面,如果某个人先到了,只等待15min,问两人见面的概率多少?

    一个小时, 15分钟 4 : 1A.B两人到达时间分别为 x, y0<= x <= 4 0<= y <= 4 |x - y| <= 1几何概型 画图 可得 7/16

  4. java多线程常用面试_java的多线程常见面试题

    并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...

  5. Redis常见面试题总结

    Redis常见面试题 持久化方式有哪些?有什么区别? redis持久化方案分为RDB和AOF两种. RDB RDB持久化可以手动执行也可以根据配置定期执行,它的作用是将某个时间点上的数据库状态保存到R ...

  6. laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)

    接上期:<必看!PHP常见面试题--MySQL篇(一)> 11.MySQL的默认事务隔离级别是? 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到. 读提交(RC): ...

  7. MySQL数据库常见面试题总结

    1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...

  8. 30岁女子跟程序员相亲,结果见面后秒拒:秃顶工资再多也不要

    大家印象当中秃顶的人往往知识更渊博,就是用脑过度才会产生,而有一个职业秃顶的概率就其他行业的人偏多,那就是程序员,毕竟他们经常加班,而且还天天面对着电脑,工作压力以及身心压力导致掉头发严重. 最近在职 ...

  9. 见面才是最好的沟通方式,商机都藏在聊天中

    躲在手机屏幕里面的生意永远都是一层弱关系,那怕彼此已经成交了无数次,出现优质的对手,换掉你也就是一眨眼的功夫. 很多人怕见面,怕应酬,很抗拒,在我看来是很难赚到大钱,那怕是电商,微商,自媒体,一样要落 ...

最新文章

  1. 快节奏的多人游戏同步 - 示例代码和在线演示
  2. 使用TESSERACT来识别字符
  3. mysql更新一个表里的字段等于另一个表某字段的值
  4. 几种典型的软件自动化测试框架
  5. 平安容器云平台 Padis--传统金融企业的 Docker 实践
  6. c语言图形界代码,求个用最简单的的代码来实现图形界面…
  7. ACwing 245. 你能回答这些问题吗(线段树区间子段最大值+单点修改)
  8. php 查看扩展 代码,[扩展推荐] 使用 PHP Insights 在终端查看 PHP 项目代码质量
  9. Codeforces340B Maximal Area Quadrilateral
  10. charles工具页面介绍
  11. MQTT教程(一):MQTT简介
  12. html制作个人简历
  13. 【html5插入透明Webm视频】
  14. 最新版O泡易支付系统平台 PHP源码 第三方第四方免签支付平台系统 全开源可二开
  15. python 判断健在循环字典的第几层_2.关于python的if判断,循环总结。
  16. linux百度资源网盘,百度网盘 linux版
  17. win版本openssl工具下载安装
  18. history命令和FHS介绍
  19. 从深度学习到LSTM
  20. redis热key监控

热门文章

  1. 第二课 壳的介绍以及脱壳常用思路
  2. redis应用场景(2)日志记录及指标统计
  3. 1、ios开发之 内购
  4. windows server操作系统一定要关闭开机磁盘自检
  5. 把握现在才是最重要的
  6. JavaScript对象理解
  7. 5. [mmc subsystem] mmc core(第五章)——card相关模块(mmc type card)
  8. 微信背单词类小程序,小鸡单词源码下载,打卡微信小程序
  9. redmine + git
  10. caffe命令及其参数解析