結果

問題 No.58 イカサマなサイコロ
ユーザー jp_stejp_ste
提出日時 2014-11-10 16:16:18
言語 Java21
(openjdk 21)
結果
WA  
実行時間 -
コード長 1,375 bytes
コンパイル時間 1,820 ms
コンパイル使用メモリ 78,268 KB
実行使用メモリ 41,372 KB
最終ジャッジ日時 2024-06-10 02:20:55
合計ジャッジ時間 3,444 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 111 ms
40,932 KB
testcase_01 AC 103 ms
41,216 KB
testcase_02 WA -
testcase_03 WA -
testcase_04 AC 109 ms
40,764 KB
testcase_05 AC 91 ms
40,104 KB
testcase_06 AC 90 ms
39,904 KB
testcase_07 AC 110 ms
40,840 KB
testcase_08 AC 88 ms
40,092 KB
testcase_09 AC 110 ms
41,372 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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(n > 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;
	}
}
0