运行要求
运行时间限制: 2sec
内存限制: 1024MB
原题链接
HSI

题目
小明参加了一次代码竞技。小明的目标是所有的提交都是AC的话。但是有些问题的提交给出了TLE的结果。
查看细节后发现,总共有N道题目,其中有M道题目结果是TLE。
这些TLE的提交,每一个耗时1900ms,有1/2的概率是AC。剩下的N-M道题的结果都是AC,每一道题耗时100ms。

小明执行以下操作

  • 提交代码竞技的所有题目的代码
  • 每次提交后,等待所有的题目的提交执行完毕
  • 如果M道题中有一道题的提交的执行结果是TLE的话,那么重新提交所有题目的代码
  • 重复以上的操作,直到所有的题目的提交的执行结果都是AC

求这次代码竞技的所有题目的提交都能够满足AC的所需要的执行时间的期待值X。X的单位是ms
求X的整数

输入前提条件

  • 输入的全部为整数
  • 1<=N<=100
  • 1<=M<=min(N,5)

输入
输入都以以下标准从命令行输入

N  M

输出
输出所需要的时间的期待值X的整数形式。另外,可以证明的是X在以上条件的限制下,它的值一定是在10000000000以下

例1
输入

1 1

输出

3800

从输入的信息可以看出,只有1道题目,耗时1900ms,有1/2的概率AC。
如果第1第一次成功,那么耗时1900ms*(1/2)ms
如果第2次才成功,那么耗时1900ms(1/2)(1/2)ms
如果第3次才成功,那么耗时1900ms(1/2)(1/2)*(1/2)ms
...
如果第k次才成功,那么耗时1900ms*(1/2)的k次方 ms

这样累计的耗时为1900ms(1/2) + 1900ms(1/2)(1/2) + 1900ms(1/2)(1/2)(1/2) + ... = 3800

例2
输入

10 2

输出

18400

从输入的信息可以看出,有10道题目,其中8道AC的题目每道题耗时100ms
剩下的2道题目,每道耗时1900ms,有1/2的概率AC

例3
输入

100 5

输出

608000

读懂题目
这是一道概率题,小明有可能尝试1次就成功了,也有可能尝试了2次才成功。也有可能尝试了10次才成功。
那么期待的时间X就是,sum(尝试i次就成功的概率*每次尝试所需要的时间)

名称未設定.001.jpeg

名称未設定.002.jpeg
解题思路1

尝试1次成功的概率 * 每次尝试所需要的时间 +
尝试2次成功的概率 * 每次尝试所需要的时间 +
尝试3次成功的概率 * 每次尝试所需要的时间 +
尝试4次成功的概率 * 每次尝试所需要的时间 +
....
尝试N次成功的概率 * 每次尝试所需要的时间

尝试2次成功的概率 = (1 - 尝试1次成功的概率)*(所有M成功的概率)
尝试3次成功的概率 = (1 - 尝试2次成功的概率)*(所有M成功的概率)
尝试4次成功的概率 = (1 - 尝试3次成功的概率)*(所有M成功的概率)
....
尝试N次成功的概率 = (1 - 尝试N-1次成功的概率)*(所有M成功的概率)

所有M成功的概率 = 1/2的M次方

代码

S = input().split(" ")
N = int(S[0])
M = int(S[1])

def calculate(n,m,baseP,i):

    s = (0.5 ** m)
    successP = s * baseP
    failureP = baseP * (1 - s)

    time =  successP * ( (n - m) * 100 + m * 1900) * i

    if successP < 1e-9:
        return time
    else:
        return time + calculate(n,m,failureP,i+1)


result = calculate(N,M,1,1)
print(round(result))

总结
这是一道概率题

※ 另外,我会在我的微信个人订阅号上推出一些文章,欢迎关注
二维码.jpg



伟大不DIAO
1 声望1 粉丝

Done is better than perfect