結果
問題 | No.1688 Veterinarian |
ユーザー |
![]() |
提出日時 | 2021-09-24 22:09:58 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 387 ms / 3,000 ms |
コード長 | 1,800 bytes |
コンパイル時間 | 2,763 ms |
コンパイル使用メモリ | 79,564 KB |
実行使用メモリ | 56,636 KB |
最終ジャッジ日時 | 2024-07-05 10:40:47 |
合計ジャッジ時間 | 6,588 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 |
ソースコード
import java.util.Scanner;public class Main {public static void main(String[] args) throws Exception {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();int n = sc.nextInt();sc.close();double[][][] dp = new double[a + 1][b + 1][c + 1];dp[a][b][c] = 1;Kaijou kai = new Kaijou(a + b + c);for (int i = 0; i < n; i++) {double[][][] wk = new double[a + 1][b + 1][c + 1];for (int j = 0; j <= a; j++) {for (int j2 = 0; j2 <= b; j2++) {for (int j3 = 0; j3 <= c; j3++) {double val = dp[j][j2][j3];if (j >= 2) {double k = kai.comb(j, 2) / kai.comb(j + j2 + j3, 2);double v = dp[j][j2][j3] * k;wk[j - 1][j2][j3] += v;val -= v;}if (j2 >= 2) {double k = kai.comb(j2, 2) / kai.comb(j + j2 + j3, 2);double v = dp[j][j2][j3] * k;wk[j][j2 - 1][j3] += v;val -= v;}if (j3 >= 2) {double k = kai.comb(j3, 2) / kai.comb(j + j2 + j3, 2);double v = dp[j][j2][j3] * k;wk[j][j2][j3 - 1] += v;val -= v;}wk[j][j2][j3] += val;}}}dp = wk;}double a1 = 0;double a2 = 0;double a3 = 0;for (int j = 0; j <= a; j++) {for (int j2 = 0; j2 <= b; j2++) {for (int j3 = 0; j3 <= c; j3++) {a1 += dp[j][j2][j3] * (a - j);a2 += dp[j][j2][j3] * (b - j2);a3 += dp[j][j2][j3] * (c - j3);}}}System.out.println(a1 + " " + a2 + " " + a3);}static class Kaijou {double[] p;public Kaijou(int n) {n++;p = new double[n];p[0] = 1;for (int i = 1; i < n; i++) {p[i] = p[i - 1] * i;}}public double comb(int n, int r) {if (n < r) return 0;return p[n] / p[r] / p[n - r];}}}