首页 > 代码库 > UVa 1636 (概率) Headshot

UVa 1636 (概率) Headshot

既然是第一道概率题,就正儿八经地分析一下吧。

题意:

有一个左轮枪,里面随机装了或者没装子弹,用一个01序列表示。现在已知扣动第一次扳机没有子弹,问是继续扣动扳机还是随机转动一下再扣,那种选择使得第二次扣扳机没有子弹的概率大。

分析:

这是一个条件概率,已知第一次扣动扳机没有子弹。

设序列长度为n,00序列的个数为a,0的个数为b

那么第二次扣的时候如果也没有子弹,就对应所给序列的连续两个0,样本空间为b,所以概率为a/b

如果随机转动一次的话,第一次扣和第二次就完全是独立的了,所以概率为b/n

技术分享
 1 #include <cstdio> 2 #include <cstring> 3  4 const int maxn = 100 + 10; 5 char s[maxn]; 6  7 int main() 8 { 9     //freopen("in.txt", "r", stdin);10 11     while(scanf("%s", s) == 1)12     {13         int l = strlen(s);14         s[l] = s[0];15         int zero = 0, doublezero = 0;16         for(int i = 0; i < l; ++i)17         {18             if(s[i] == 0)19                 zero++;20             if(s[i] == 0 && s[i+1] == 0)21                 doublezero++;22         }23         int d = doublezero * l - zero * zero;24         if(d > 0)25             puts("SHOOT");26         else if(d < 0)27             puts("ROTATE");28         else29             puts("EQUAL");30     }31 32     return 0;33 }
代码君

 

UVa 1636 (概率) Headshot