[UVa1636]Headshot
Posted Mrsrz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[UVa1636]Headshot相关的知识,希望对你有一定的参考价值。
题目大意:给你一把左轮手枪,随机装上子弹。现在你已经打了一枪,没有子弹,问你是直接再打一枪没有子弹的几率高,还是随机转一下没有子弹的几率高,或者一样高?
(数据中0表示没有子弹,1表示有)
解题思路:简单概率问题。
直接再打一枪没有子弹的几率就是“00”的个数除以“00”和“01”的总个数(第一枪没子弹),而“00”和“01”的总个数就是“0”的个数(有“0”必定有”00“或”01“,除非只有一个)。
而随机转一下没子弹的概率就是”0“的个数除以总个数。
那么设”00“有a个,”0“有b个,总个数为n,则比较$\frac{a}{b}$和$\frac{b}{n}$即可。
这个也可以转化为比较$an$和$b^2$,我认为这样更好,因为b可能为0,此时就会出现除以0导致答案错误的情况,而且这么做没有浮点误差。
然后随便统计一下即可。
C++ Code:
#include<cstdio> #include<cstring> char s[11111]; int _00,_0; int main(){ while(scanf("%s",s)!=EOF){ int i,len=strlen(s); _00=_0=0; if(s[0]==‘0‘)++_0; for(i=1;i<len;++i){ if(s[i]==‘0‘){ ++_0; if(s[i-1]==‘0‘)++_00; } } if(s[len-1]==‘0‘&&s[0]==‘0‘)++_00; if(_00*len==_0*_0)puts("EQUAL");else if(_00*len>_0*_0)puts("SHOOT");else puts("ROTATE"); memset(s,0,sizeof s); } return 0; }
以上是关于[UVa1636]Headshot的主要内容,如果未能解决你的问题,请参考以下文章