UVa--1636 Headshot(概率)

UVa 1636

题意

你和人决斗。决斗规则如下:用一把有n个弹槽的左轮手枪,对着自己脑袋来一枪,孰生孰死看天意。现在对方已经装了若干发子弹,并随机转了一下转轮,子弹呢用一个01序列表示,0表示这个弹槽无子弹,1表示有子弹。对方先对着自个脑袋开了一枪,嗯,你只听到了一声’click’,人还好好的,是空枪。现在轮到你了,摆在你面前的有两个选择,一是直接对自己开射,二是转一下转轮再来开射,显然你会选择生还希望更大的那种。
现在要做的就是根据子弹装填的序列,进行判断,如果直接shot生还希望大输出”SHOOT”,如果转一下生还希望大输出”ROTATE”,两种选择生还希望相同输出“EQUAL”.

题解

已知第一枪是没子弹的,再直接开一枪没子弹的概率是在前者已发生的情况下,因此是一个条件概率。
这个概率等于 Cnt("00")Cnt("00")+Cnt("01")=Cnt("00")Cnt("0") Cnt(str) 表示str在01序列中的出现次数。
而转一下再开枪没子弹的概率就是 Cnt("0") 除以序列长度。
设”00”的个数为a, “0”的个数为b,两个概率分别是 a/b b/n ,转化一下比较 an b2

#import sys
#sys.stdin = open(r"F:\python workspace\.idea\random.txt")

while True:
    try:
        s = input()
    except:
        break
    n = len(s)
    cnt00 = 0
    cnt0  = s.count('0')    #count the number of '0'
    s = s[:] + s[0]         #note that this is a cylinder
    while s:                #count the number of '00'
        if s.find('00') != -1:
            cnt00 += 1
            s = s[s.index('00') + 1:]
        else:
            break

    if cnt00 * n == cnt0 ** 2:
        print("EQUAL")
    elif cnt00 * n > cnt0 ** 2:
        print("SHOOT")
    else:
        print("ROTATE")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值