結果
| 問題 |
No.58 イカサマなサイコロ
|
| コンテスト | |
| ユーザー |
tenten
|
| 提出日時 | 2020-11-17 12:34:06 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 135 ms / 5,000 ms |
| コード長 | 1,518 bytes |
| コンパイル時間 | 4,530 ms |
| コンパイル使用メモリ | 77,624 KB |
| 実行使用メモリ | 54,496 KB |
| 最終ジャッジ日時 | 2024-07-23 08:11:36 |
| 合計ジャッジ時間 | 4,788 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
import java.util.*;
public class Main {
static HashSet<String> all = new HashSet<>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] ika = new int[]{3, 3, 4, 4, 5, 5};
int[] base = new int[11];
int[] next = new int[11];
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
base[j - i + 5]++;
}
for (int x : ika) {
next[x - i + 5]++;
}
}
double[][] probables = new double[n + 1][101];
probables[0][50] = 1;
for (int i = 1; i <= n; i++) {
int[] tmp;
if (i <= k) {
tmp = next;
} else {
tmp = base;
}
for (int a = 0; a < probables[i].length; a++) {
if (probables[i - 1][a] == 0.0) {
continue;
}
for (int b = 0; b < tmp.length; b++) {
int idx = a + b - 5;
if (idx < 0 || idx >= probables[i].length || tmp[b] == 0) {
continue;
}
probables[i][idx] += probables[i - 1][a] * tmp[b] / 36;
}
}
}
double ans = 0;
for (int i = 51; i < probables[n].length; i++) {
ans += probables[n][i];
}
System.out.println(ans);
}
}
tenten