http://lightoj.com/volume_showproblem.php?problem=1265
感觉蛮好玩的,和鹿相遇的时候,杀还是不杀呢?
当鹿越来越少的时候,你遇到老虎被杀的概率就会增大,但是老虎遇到老虎相互残杀的概率也会增大。
而题目也没说你杀鹿的概率是多少啊?
完全没有头绪?其实仔细想想,你存活的概率只和老虎有关。
因为老虎是成对死的,所以如果老虎数量是奇数,总有一天会遇到老虎,必死无疑。
如果老虎数量是偶数就算概率
因为概率只和老虎有关,所以只考虑,存活下来就是要每天都是两只老虎相遇
所以设当天的老虎数是x
那么当天是老虎与老虎相遇的概率p = x*(x-1)/(x*(x+1)) = (x-1)/(x+1)
这样按每天死两只老虎的概率递推(乘法原理)下去,直到老虎全部死光即存活
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<algorithm>
#define mem(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int main()
{
int T;cin>>T;int kas = 0;
while (T--)
{
int t,d;
cin>>t>>d;
printf("Case %d: ",++kas);
if (t&1) printf("%.7f\n",0.0);
else
{
int x = t;
double p = 1.0;
while(x)
{
p*=(x*1.0-1.0)/(1.0*x+1.0);
x -= 2;
}
printf("%.7f\n",p);
}
}
return 0;
}