Light OJ 1265
题意:
T组数据,每组数据包含两个数,t,d,分别表示老虎,鹿的数量,有几种情况:
1.老虎遇见鹿,吃掉鹿
2.老虎遇见人,吃掉人
3.老虎遇到老虎,老虎成对消失
4.鹿遇到鹿,什么都不会发生
5.鹿遇到人,人可以决定杀不杀鹿
求人能存活的概率
题解:
虽然有五种情况,但是我们很容易就会发现,有些情况对于人是否存活是没有任何贡献的,人能不能存活只取决于人是否遇见了老虎,怎样才能在最后不遇见老虎就成了题目求解的关键,显然,消灭老虎的途径只有让两只相遇,老虎成对消失,所以可以分成三种情况:
1.没有老虎,人一定能够存活
2.老虎的个数是单数,一定有一只老虎最后没被消灭,人一定不能存活
3.老虎的个数是双数,求人每天都不会遇到老虎的概率–两只老虎相遇,设当前剩余老虎数量last,由随机抽取数可知从样本数量(x+1)中抽两个数,两个都是老虎的概率C(x, 2) / C(x + 1, 2)
这里是写得丑丑的AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int T, t, d;
int main() {
scanf("%d", &T);
for (int Case = 1; Case <= T; Case++) {
scanf("%d %d", &t, &d);
cout << "Case " << Case << ": ";
if (t % 2) printf("0\n");
else if (t == 0) printf("1\n");
else {
double last = t;
double ans = 1.0;
while (last > 0) {
ans = ans * ((last - 1) / (last + 1));
last -= 2; //老虎成对消失
}
printf("%.7lf\n", ans);
}
}
}
被学长说了不认真刷题之后打算奋发图强的某大二acm渣渣