yukicoder No.959 tree and fire
★2は少し難しく感じます。
問題
No.959 tree and fire - yukicoder
期待値は最近の高校生は学習していない可能性が高いです。
よくわからない人はざっくり平均のことだと思っておきましょう。
ちなみに数学Bの教科書に載っています。
各マス目について木が存在する確率を求めればよい。
角について
調べたいマス+周り2マスが木であればよく,その確率は
また,このようなマスは4マスある(角は4つ)。端(角以外)について
調べたいマス+周囲3マスが木であればよく,その確率は
また,このようなマスはマスある。内部(角,端以外)について
調べたいマス+周囲4マスが木であればよく,その確率は
また,このようなマスは マスある。
従って,求める期待値は以下のようになる。
の値から直接計算できるのでループ等を用いる必要もない。
注意
のときなどのコーナーケースは場合分けが必要。
かつのとき
がそのまま期待値となるかつのとき(が逆のときも同じ)
調べたいマス+周囲2マスが木であればよく,そのようなマスはマスあるので
ソースコードは以下
N,M = map(int,input().split()) p = float(input()) ans = 0 #1マスのとき if N == 1 and M == 1: print(p) exit() #細長いとき if (N == 1 and M != 1) or (N != 1 and M == 1): E = max(N,M) print(2* p**2 + (E-2)* p**3) exit() #それ以外 print(4* p**3 + 2*(M+N-4)* p**4 + (M-2)*(N-2)* p**5 )
余談
最初,上記の考察をしてから各マス目に対して上記の処理をループで実行したらTLEになりました。注意しましょう。