1159: 中南才女
Time Limit: 1 Sec Memory Limit: 128 MBSUBMIT: 13 Solved: 10
[SUBMIT] [STATUS]
Description
话说中南有位才女,叫做珊,学校里面很多同学都很喜欢她,想追她做女朋友。hkx也不例外。可是不知道为什么,向她表白的同学都一一落马,一向自卑的hkx一直也不敢表白,hkx得知珊有一天晚上8点钟以后的某段时间会去学校的某个地方弹吉他,可是hkx晚上9点以后才有时间去,虽然晚了一点,但也有机会,所以hkx就去了。
假设珊晚上到达的时刻是等可能的分布在8点到8+L点,hkx到达的时刻是等可能的分布在9点到9+L点。珊到达之后会在那里弹吉他t小时,之后就会离开。hkx到达之后如果没见到珊的话,他就会等上t小时,如果这t小时内珊还不出现,他就会离开。那么hkx能够见到珊的概率是多少呢?
Input
多组数据,每组数据包括两个实数,L和t,一组数据占一行
1<=L<=10
0<=t<=10
Output
输出hkx能够见到珊的概率,四舍五入到小数点后6位
Sample Input
2.0 0.0
2.0 3.0
Sample Output
0.000000
1.000000
这道题一开始憋了很长时间不懂做,后来经su学长启发,终于A掉了,Orz su。
这道概率题可以这样做:
用几何的概率面积法,像下面这个图,将两个人的时间区间分布到x轴和y轴,那么可以形成一个矩形,矩形面积即为总概率1。
设|x - y| <= t 与矩形围成的图形的面积(图中红色部分)为s1, 矩形面积为S,那么显然概率 P = s1 / S 。
(Note:矩形已平移了8个单位):
把所有相交的情况都考虑完全就可以了。
一共六种情况:1、概率为0的
2、概率为1的
3、移动变换
#include <cstdio>
#include <cstring>
int main()
{
double L, t, p;
while(~scanf("%lf%lf", &L, &t))
{
if(L + t <= 1.0)
{
p = 0.0;
}
else if(t >= L + 1)
{
p = 1.0;
printf("%lf\n", p);
continue;
}
else if(L - t >= 1 && L + t <= L + 1)
{
p = 1.0 / 2.0 * ((L + t - 1) * (L + t - 1) - (L - t - 1) * (L - t - 1));
}
else if(L - t <= 1 && L + t <= L + 1)
{
p = 1.0 / 2.0 * (L + t - 1) * (L + t - 1);
}
else if(L - t >= 1 && L + t >= L + 1 && L + t <= 2 * L + 1)
{
p = L * L - 1.0 / 2.0 * (L - t - 1) * (L - t - 1) - 1.0 / 2.0 * (L + 1 - t) * (L + 1 - t);
}
else if(L - t <= 1 && L + t >= L + 1 && L + t <= 2 * L + 1)
{
p = L * L - 1.0 / 2.0 * (L + 1 - t) * (L + 1 - t);
}
printf("%lf\n", p / (L * L));
}
return 0;
}