AtCoder Context ABC 078 C HSI

運行要求
運行時間限制: 2sec
內存限制: 1024MB
原題連接
HSI微信

題目
小明參加了一次代碼競技。小明的目標是全部的提交都是AC的話。可是有些問題的提交給出了TLE的結果。
查看細節後發現,總共有N道題目,其中有M道題目結果是TLE。
這些TLE的提交,每個耗時1900ms,有1/2的機率是AC。剩下的N-M道題的結果都是AC,每一道題耗時100ms。spa

小明執行如下操做命令行

  • 提交代碼競技的全部題目的代碼
  • 每次提交後,等待全部的題目的提交執行完畢
  • 若是M道題中有一道題的提交的執行結果是TLE的話,那麼從新提交全部題目的代碼
  • 重複以上的操做,直到全部的題目的提交的執行結果都是AC

求此次代碼競技的全部題目的提交都可以知足AC的所須要的執行時間的期待值X。X的單位是ms
求X的整數code

輸入前提條件內存

  • 輸入的所有爲整數
  • 1<=N<=100
  • 1<=M<=min(N,5)

輸入
輸入都以如下標準從命令行輸入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))

總結
這是一道機率題

※ 另外,我會在個人微信我的訂閱號上推出一些文章,歡迎關注
二維碼.jpg

相關文章
相關標籤/搜索