結果

問題 No.242 ビンゴゲーム
ユーザー ぴろずぴろず
提出日時 2015-07-10 23:19:45
言語 Java21
(openjdk 21)
結果
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
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 173 ms
54,120 KB
testcase_01 AC 1,020 ms
53,892 KB
testcase_02 AC 1,033 ms
53,864 KB
testcase_03 AC 161 ms
53,304 KB
testcase_04 AC 155 ms
54,336 KB
testcase_05 AC 152 ms
53,188 KB
testcase_06 AC 500 ms
54,140 KB
testcase_07 AC 1,054 ms
54,116 KB
testcase_08 AC 1,014 ms
54,100 KB
testcase_09 AC 1,068 ms
53,240 KB
testcase_10 AC 1,133 ms
54,220 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

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];
	}

}
0