結果

問題 No.1688 Veterinarian
ユーザー merlinmerlin
提出日時 2021-09-24 23:41:47
言語 Java21
(openjdk 21)
結果
AC  
実行時間 1,275 ms / 3,000 ms
コード長 1,287 bytes
コンパイル時間 2,489 ms
コンパイル使用メモリ 77,864 KB
実行使用メモリ 371,332 KB
最終ジャッジ日時 2024-07-05 11:37:29
合計ジャッジ時間 23,276 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,067 ms
368,072 KB
testcase_01 AC 1,086 ms
367,884 KB
testcase_02 AC 1,062 ms
368,144 KB
testcase_03 AC 1,061 ms
368,072 KB
testcase_04 AC 1,062 ms
368,060 KB
testcase_05 AC 1,068 ms
368,048 KB
testcase_06 AC 1,081 ms
368,500 KB
testcase_07 AC 1,094 ms
368,072 KB
testcase_08 AC 1,275 ms
371,240 KB
testcase_09 AC 1,255 ms
371,052 KB
testcase_10 AC 1,172 ms
369,840 KB
testcase_11 AC 1,137 ms
371,332 KB
testcase_12 AC 1,077 ms
367,968 KB
testcase_13 AC 1,140 ms
369,928 KB
testcase_14 AC 1,083 ms
368,212 KB
testcase_15 AC 1,217 ms
370,040 KB
testcase_16 AC 1,075 ms
368,216 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.*;
import java.util.*;

class Main
{
    public static void main(String args[])throws Exception
    {
        BufferedReader bu=new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb=new StringBuilder();
        String s[]=bu.readLine().split(" ");
        int a=Integer.parseInt(s[0]),b=Integer.parseInt(s[1]),c=Integer.parseInt(s[2]),n=Integer.parseInt(s[3]);
        for(int i=0;i<=a;i++)
        for(int j=0;j<=b;j++)
        for(int k=0;k<=c;k++)
        for(int l=0;l<=n;l++) Arrays.fill(dp[i][j][k][l],-1);

        System.out.printf("%.7f %.7f %.7f\n",calc(a,b,c,n,0),calc(a,b,c,n,1),calc(a,b,c,n,2));
    }

    static double dp[][][][][]=new double[51][51][51][51][3];
    static double calc(int a, int b, int c, int n, int k)
    {
        if(n==0) return 0.0;
        else if(dp[a][b][c][n][k]>=0.0) return dp[a][b][c][n][k];

        int all=(a+b+c)*(a+b+c-1)/2, sum=a*(a-1)/2+b*(b-1)/2+c*(c-1)/2;
        double add=calc(a,b,c,n-1,k)*(all-sum)/all;

        if(a>=2) add+=(calc(a-1,b,c,n-1,k)+ ((k==0)?1:0))*(a*(a-1)/2)/all;
        if(b>=2) add+=(calc(a,b-1,c,n-1,k)+ ((k==1)?1:0))*(b*(b-1)/2)/all;
        if(c>=2) add+=(calc(a,b,c-1,n-1,k)+ ((k==2)?1:0))*(c*(c-1)/2)/all;

        dp[a][b][c][n][k]=add;
        return add;
    }
}
0