UVA11722(见面概率)
题意:
有一个车站,两个人想要在这个车站见面,第一个人会在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(见面概率)的更多相关文章
- UVA 11722
You are going from Dhaka to Chittagong by train and you came to know one of your old friends is goin ...
- UVA11722概率问题之线性规划
链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&am ...
- uva11722 - Joining with Friend(几何概率)
11722 - Joining with Friend You are going from Dhaka to Chittagong by train and you came to know one ...
- uva 11722 - Joining with Friend(概率)
题目连接:uva 11722 - Joining with Friend 题目大意:你和朋友乘火车,而且都会路过A市.给定两人可能到达A市的时段,火车会停w.问说两人能够见面的概率. 解题思路:y = ...
- PHP常见面试题汇总(二)
PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...
- LightOJ.1265.Island of Survival(概率)
题目链接...我找不着了 \(Description\) 岛上有t只老虎,1个人,d只鹿.每天随机有两个动物见面 1.老虎和老虎碰面,两只老虎就会同归于尽: 2.老虎和人碰面或者和鹿碰面,老虎都会吃掉 ...
- ZOJ 3551 Bloodsucker <概率DP>
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3551 题意:开始有N-1个人和一个吸血鬼, 每天有两个生物见面,当人 ...
- Gym - 101987G Secret Code (概率+数学积分)
题意:有A,B,C三个人要见面,每个人在[0,S]随机选择一个时间点作为见面时间,先到的那个人要等下一个人来了之后和他确认信息,然后马上就走. 例如,假如A先到,B其次,C最后到,那么A要等B到了之后 ...
- [bzoj2152][聪聪和可可] (点分治+概率)
Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...
随机推荐
- Web微信协议
[文档]Web微信协议 1.登录 1.1 获取uuid(get) 请求 https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&red ...
- AOP(面向切面编程)大概了解一下
前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...
- editplus更改编码
1.在Tools下拉后选择Configure User Tools 2.在左边导航菜单找到File,对应右边视图中的Default encoding 3.将编码更改为utf-8,点击底部的OK保存.
- P1328_生活大爆炸版石头剪刀布(JAVA语言)
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...
- CVE-2020-1472 Zerologon
CVE-2020-1472 Zerologon 漏洞简介 CVE-2020-1472是继MS17010之后一个比较好用的内网提权漏洞,影响Windows Server 2008R 2至Windows ...
- 总结traefik 在k8s 环境中的配置文件
总结traefik 在k8s 环境中的配置文件 traefik.toml配置文件引用 [www@localhost traefik-ingress]$ more * :::::::::::::: co ...
- 深入理解Java并发框架AQS系列(四):共享锁(Shared Lock)
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock) 深入 ...
- [Fundamental of Power Electronics]-PART I-4.开关实现-4.1 开关应用
4.1 开关应用 4.1.1 单象限开关 理想的SPST(Single pole single throw)开关如图4.1所示.开关包含电源端子1和0,其电流和电压极性如图所示.在接通状态下,电压\( ...
- Two point
利用问题的本身与序列的特新,使用两个下标i, j对序列进行扫描(可以同向扫描,也可以反向扫描),以较低的时间复杂度解决问题,一般是O(n) 例1:给定一个递增的正整数序列和一个正整数M,求序列中的两个 ...
- JAP 1.0.1 以及 《JAP产品技术白皮书》正式发布
快讯 JAP 1.0.1 正式发布 <JAP产品技术白皮书>正式发布.立即获取:白皮书 JAP 1.0.1 版本内容 新增功能/支持 添加 com.fujieid.jap.core.uti ...