これは、昨日インタビューストリートで終了したプログラミングコンテストでの質問でした。
アリスとボブはゲームをします。ラウンドi(i> = 1)での操作は次のとおりです。
- アリスはボブに2*i-1ドルを支払います、
- アリスは偏ったコインを投げます、
- コインの結果がk連続ラウンドのヘッドだった場合、ゲームは停止します。それ以外の場合、ゲームは続行されます。
kと、トスの結果がヘッド(p)である確率を考えると、プログラムは、アリスがボブに支払う予想金額と、予想されるラウンド数を見つける必要があります。
入力
入力の最初の行には、テストケースの数が含まれています(T <= 50)。次の各T行には、単一のスペースで区切られたpとkが含まれています。pは、0.6 <= p<=1となる小数点以下2桁までの10進数です。kは0<k<=20となる正の整数です。
出力
テストケースごとに、2つの整数を出力します。最初の数字は予想されるゲームのラウンド数の整数部分であり、2番目の数字は予想されるドル数の整数部分であり、アリスはボブに支払います。
サンプル入力
3
0.6 1
1 20
0.80 8
サンプル出力
1 3
20 400
24 976
私は問題の最初の部分、つまりゲームの予想ラウンド数を取得しました。私は次のコードでそれを手に入れました
if __name__ == '__main__':
t = int(raw_input())
while t :
t -= 1
temp = str(raw_input())
p,k = temp.split(' ')
p = float(p)
k = int(k)
#print p,k
ans = 0.0
num = k * (p**k)
den = 1
q = 1.0 - p
for N in range(1,k+1):
den = den - ((p**(N-1))*q)
num = num + (N*(p**(N-1))*q)
#print (N*(q**N))
print int(num/den)
しかし、問題の2番目の部分はまだ私を困惑させています。つまり、アリスがボブに支払う予想金額です。期待されるペイオフはどのように計算できますか?