結果
| 問題 |
No.242 ビンゴゲーム
|
| ユーザー |
ぴろず
|
| 提出日時 | 2015-07-10 23:19:45 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 1,133 ms / 2,000 ms |
| コード長 | 1,463 bytes |
| コンパイル時間 | 1,782 ms |
| コンパイル使用メモリ | 77,096 KB |
| 実行使用メモリ | 54,336 KB |
| 最終ジャッジ日時 | 2024-07-08 02:17:21 |
| 合計ジャッジ時間 | 9,954 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 8 |
ソースコード
package no242;
import java.util.Scanner;
public class Main {
static double[][] c = new double[100][100];
static int[] bingo =
{
0b00000_00000_00000_00000_11111,
0b00000_00000_00000_11111_00000,
0b00000_00000_11111_00000_00000,
0b00000_11111_00000_00000_00000,
0b11111_00000_00000_00000_00000,
0b00001_00001_00001_00001_00001,
0b00010_00010_00010_00010_00010,
0b00100_00100_00100_00100_00100,
0b01000_01000_01000_01000_01000,
0b10000_10000_10000_10000_10000,
0b00001_00010_00100_01000_10000,
0b10000_01000_00100_00010_00001,
};
public static void main(String[] args) {
combInit();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(solve(n));
// for(int i=1;i<=99;i++) {
// System.out.println(i + ":" + solve(i));
// }
}
public static double solve(int n) {
double nncn = comb(99,n);
double ans = 0;
for(int i=0;i<(1<<25);i++) {
int bc = Integer.bitCount(i);
if (bc > n) {
continue;
}
int count = 0;
for(int j=0;j<bingo.length;j++) {
if ((~i & bingo[j]) == 0) {
count++;
}
}
ans += comb(74, n-bc) * count / nncn;
}
return ans;
}
public static void combInit() {
for(int i=0;i<100;i++) {
c[i][0] = c[i][i] = 1;
}
for(int i=1;i<100;i++) {
for(int j=1;j<i;j++) {
c[i][j] = c[i-1][j] + c[i-1][j-1];
}
}
}
public static double comb(int n,int k) {
if (k < 0) {
return 0;
}
return c[n][k];
}
}
ぴろず