Top
yukicoder No.959 "tree and fire"
$N \times M$ のマス目の各マスに、確率 $p$ で木が植わっており、そうでないときは炎が燃えています。
炎は四近傍の木を燃やします。
炎が木を燃やした後に残っている木の本数の期待値を求めてください。

・$1 \le N, M \le 10^{9}$
・$0 \le p \le 1$
・$p$ は小数点以下最大 $7$ 桁

問題自体はそんなに難しくなくて、
木が生えているときにその周りのどこかに炎があれば燃えてしまうので、その確率を求めればいい。

思ったよりも誤差が出てジャッジの $10^{-6}$ に収まらないことがあるので、大丈夫だろうと思い込まずに Decimal を使った方がいい。
あるいは厳密に分数でやってもいい。

#!/usr/bin/python2
# -*- coding: utf-8 -*-
# †
from decimal import *

def f(N, M, p):
    if N > M:
        N, M = M, N
    s = [0] * 5
    if N == 1:
        if M > 1:
            s[1] = 2
            s[2] = M-2
    else:
        s[2] = 4
        s[3] = 2 * (N-2 + M-2)
        s[4] = (N-2) * (M-2)
    res = N*M * p
    for i in [1, 2, 3, 4]:
        res -= s[i] * (1 - p**i) * p
    return res


N, M = map(int, raw_input().split())
p = Decimal(raw_input())
res = f(N, M, p)
print res
    


(ΦωΦ)<おしまい