提出 #31380844


ソースコード 拡げる

use proconio::input;

fn f(dp: &mut Vec<Vec<Vec<Option<f64>>>>, n: usize, c: (usize, usize, usize)) -> f64 {
    if let Some(x) = dp[c.0][c.1][c.2] {
        return x;
    }

    let m = n as f64;

    let (c1, c2, c3) = c;
    let c0 = n - (c1 + c2 + c3);

    if c0 == n {
        return 0_f64;
    }

    let p0 = (c0 as f64) / m;
    let p1 = (c1 as f64) / m;
    let p2 = (c2 as f64) / m;
    let p3 = (c3 as f64) / m;

    let f0 = 1_f64;
    let f1 = if c1 > 0 {
        f(dp, n, (c1 - 1, c2, c3)) * p1
    } else {
        0_f64
    };
    let f2 = if c2 > 0 {
        f(dp, n, (c1 + 1, c2 - 1, c3)) * p2
    } else {
        0_f64
    };
    let f3 = if c3 > 0 {
        f(dp, n, (c1, c2 + 1, c3 - 1)) * p3
    } else {
        0_f64
    };

    let res = (f0 + f1 + f2 + f3) / (1_f64 - p0);

    dp[c.0][c.1][c.2] = Some(res);

    res
}

fn main() {
    input! {
        n: usize,
        a: [usize; n],
    };
    let mut c = (0, 0, 0);
    for a_i in a {
        match a_i {
            1 => c.0 += 1,
            2 => c.1 += 1,
            3 => c.2 += 1,
            _ => unreachable!(),
        }
    }
    let mut dp = vec![vec![vec![None; n + 1]; n + 1]; n + 1];
    let ans = f(&mut dp, n, c);
    println!("{}", ans);
}

提出情報

提出日時
問題 J - Sushi
ユーザ bouzuya
言語 Rust (1.42.0)
得点 100
コード長 1239 Byte
結果 AC
実行時間 520 ms
メモリ 431852 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 22
セット名 テストケース
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17
ケース名 結果 実行時間 メモリ
0_00 AC 6 ms 1904 KiB
0_01 AC 1 ms 2132 KiB
0_02 AC 2 ms 2136 KiB
0_03 AC 2 ms 2056 KiB
1_00 AC 2 ms 2052 KiB
1_01 AC 2 ms 2076 KiB
1_02 AC 2 ms 2108 KiB
1_03 AC 264 ms 431760 KiB
1_04 AC 272 ms 431764 KiB
1_05 AC 520 ms 431776 KiB
1_06 AC 265 ms 431752 KiB
1_07 AC 391 ms 431852 KiB
1_08 AC 482 ms 431764 KiB
1_09 AC 412 ms 431780 KiB
1_10 AC 376 ms 410612 KiB
1_11 AC 433 ms 410692 KiB
1_12 AC 438 ms 386352 KiB
1_13 AC 508 ms 431744 KiB
1_14 AC 492 ms 419044 KiB
1_15 AC 495 ms 427512 KiB
1_16 AC 501 ms 423280 KiB
1_17 AC 518 ms 431760 KiB