結果

問題 No.58 イカサマなサイコロ
ユーザー jajagacchijajagacchi
提出日時 2016-12-31 13:55:23
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 1,229 bytes
コンパイル時間 643 ms
コンパイル使用メモリ 56,536 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-12-16 04:28:45
合計ジャッジ時間 1,051 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 2 ms
5,248 KB
testcase_04 AC 2 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 1 ms
5,248 KB
testcase_07 AC 1 ms
5,248 KB
testcase_08 AC 2 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <stdio.h>

int main()
{
	int N; std::cin >> N;
	int K; std::cin >> K;
	double dp[61][61];
	if(K==0)
	{
		for(int i=1;i<=6;i++)
		{
			dp[1][i] = 1./6.;
		}
	}
	else
	{
		for(int i=1;i<=3;i++)
		{
			dp[1][i] = 0;
		}
		for(int i=4;i<=6;i++)
		{
			dp[1][i] = 2./6.;
		}
	}
	for(int i=7;i<=N;i++)
	{
		dp[1][i] = 0;
	}
	for(int i=2;i<=N;i++)
		for(int j=1;j<=6*N;j++)
		{
			dp[i][j] = 0;
			if(i <= K)
			{
				for(int j2=4;j2<=6;j2++)
				{
					if(j-j2>=1) dp[i][j] += dp[i-1][j-j2]/3.;
				}
			}
			else
			{
				for(int j2=1;j2<=6;j2++)
				{
					if(j-j2>=1) dp[i][j] += dp[i-1][j-j2]/6.;
				}
			}
		}
	double p1[61];
	for(int i=1;i<=6*N;i++)
	{
		p1[i] = 0;
	}
	for(int i=1;i<=6*N;i++)
	{
		p1[i] += dp[N][i];
	}
	
	for(int i=1;i<=6;i++)
	{
		dp[1][i] = 1./6.;
	}
	for(int i=7;i<=N;i++)
	{
		dp[1][i] = 0;
	}
	for(int i=2;i<=N;i++)
		for(int j=1;j<=6*N;j++)
		{
			dp[i][j] = 0;
			for(int j2=1;j2<=6;j2++)
			{
				if(j-j2>=1) dp[i][j] += dp[i-1][j-j2]/6.;
			}
		}
	double p2[61];
	for(int i=1;i<=6*N;i++)
	{
		p2[i] += dp[N][i];
	}

	double prob = 0;
	for(int n1=0 ; n1<=6*N ; n1++)
		for(int n2=0 ; n2<n1 ; n2++)
		{
			prob += p1[n1] * p2[n2];
		}
	printf("%.5f\n" , prob);
	return 0;
}
0