結果
問題 | No.58 イカサマなサイコロ |
ユーザー | jp_ste |
提出日時 | 2014-11-10 16:21:22 |
言語 | Java21 (openjdk 21) |
結果 |
AC
|
実行時間 | 118 ms / 5,000 ms |
コード長 | 1,378 bytes |
コンパイル時間 | 1,920 ms |
コンパイル使用メモリ | 77,112 KB |
実行使用メモリ | 54,172 KB |
最終ジャッジ日時 | 2024-06-10 02:20:59 |
合計ジャッジ時間 | 3,596 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 110 ms
53,640 KB |
testcase_01 | AC | 116 ms
53,704 KB |
testcase_02 | AC | 114 ms
53,948 KB |
testcase_03 | AC | 104 ms
52,776 KB |
testcase_04 | AC | 95 ms
52,496 KB |
testcase_05 | AC | 105 ms
53,964 KB |
testcase_06 | AC | 118 ms
53,752 KB |
testcase_07 | AC | 109 ms
54,172 KB |
testcase_08 | AC | 108 ms
54,088 KB |
testcase_09 | AC | 108 ms
53,924 KB |
ソースコード
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { final static double NORMAL[] = {1,2,3,4,5,6}; final static double CHEAT [] = {4,4,5,5,6,6}; public static void main(String[] args) throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(r.readLine()); int k = Integer.parseInt(r.readLine()); double tarou[][] = makeDpList(n, k); double jirou[][] = makeDpList(n, 0); double sum = 0d; for(int i=n; i<=6*n; i++) { for(int j=n; j<=6*n; j++) { if(i-j <= 0) break; sum += (tarou[i][n] * jirou[j][n]); } } System.out.println(String.format("%.5f", sum)); } static double[][] makeDpList(int n, int k) { int nN = n - k; double list[][] = new double[n*6+1][n+1]; if(nN > 0) { for(int i=1; i<=6; i++) list[i][1] = 1d/6; } else { for(int i=4; i<=6; i++) list[i][1] = 2d/6; } double d[]; for(int j=2; j<=n; j++) { if(j<=nN) { d = NORMAL; } else { d = CHEAT ; } int y = 6; for(int i=j; i<=j*6; i++) { for(int m=0; m<6; m++) { int rem = i-(int)d[m]; if(rem < 0) continue; list[i][j] += list[rem][j-1]; } if(list[i][j] > 0) list[i][j] /= y; } y *= 6; } return list; } }