运行要求
运行时间限制: 2sec
内存限制: 1024MB
原题连接
HSI微信
题目
小明参加了一次代码竞技。小明的目标是全部的提交都是AC的话。可是有些问题的提交给出了TLE的结果。
查看细节后发现,总共有N道题目,其中有M道题目结果是TLE。
这些TLE的提交,每个耗时1900ms,有1/2的几率是AC。剩下的N-M道题的结果都是AC,每一道题耗时100ms。spa
小明执行如下操做命令行
求此次代码竞技的全部题目的提交都可以知足AC的所须要的执行时间的期待值X。X的单位是ms
求X的整数code
输入前提条件内存
输入
输入都以如下标准从命令行输入get
N M
输出
输出所须要的时间的期待值X的整数形式。另外,能够证实的是X在以上条件的限制下,它的值必定是在10000000000如下input
例1
输入it
1 1
输出class
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次方 mstest
这样累计的耗时为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次就成功的几率*每次尝试所须要的时间)
解题思路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))
总结
这是一道几率题
※ 另外,我会在个人微信我的订阅号上推出一些文章,欢迎关注