結果

問題 No.58 イカサマなサイコロ
ユーザー jajagacchijajagacchi
提出日時 2016-12-31 13:43:01
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 716 ms / 5,000 ms
コード長 1,412 bytes
コンパイル時間 3,536 ms
コンパイル使用メモリ 65,888 KB
実行使用メモリ 4,380 KB
最終ジャッジ日時 2023-08-22 08:54:07
合計ジャッジ時間 3,921 ms
ジャッジサーバーID
(参考情報)
judge14 / judge11
このコードへのチャレンジ(β)

テストケース

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

ソースコード

diff #

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

struct Result
{
	int sum , num;
};

int main()
{
	int N; std::cin >> N;
	int K; std::cin >> K;

	int den = pow(6 , N);

	double p1[61];
	double p2[61];
	for(int i=0;i<=6*N;i++)
	{
		p1[i] = 0;
		p2[i] = 0;
	}
	
	std::stack<Result> s;
	for(int i=1 ; i<=6 ; i++)
	{
		s.push(Result{i,1});
	}

	while(s.size() > 0)
	{
		Result node = s.top(); s.pop();
		if(node.num==N)
		{
			p2[node.sum]++;
		}
		if(node.num < N)
		{
			for(int i=1;i<=6;i++)
			{
				s.push(Result{node.sum+i,node.num+1});
			}
		}
	}
	for(int i=0 ; i<=6*N ; i++)
	{
		p2[i] /= (double)den;
	}

	if(K==0)
	{
		for(int i=0 ; i<=6*N ; i++)
		{
			p1[i] = p2[i];
		}
	}
	else
	{
		for(int i=4 ; i<=6 ; i++)
		{
			s.push(Result{i,1});
			s.push(Result{i,1});
		}

		while(s.size() > 0)
		{
			Result node = s.top(); s.pop();
			if(node.num==N)
			{
				p1[node.sum]++;
			}
			if(node.num < K)
			{
				for(int i=4;i<=6;i++)
				{
					s.push(Result{node.sum+i,node.num+1});
					s.push(Result{node.sum+i,node.num+1});
				}
			}
			else if(node.num < N)
			{
				for(int i=1;i<=6;i++)
				{
					s.push(Result{node.sum+i,node.num+1});
				}
			}
		}
		for(int i=0 ; i<=6*N ; i++)
		{
			p1[i] /= (double)den;
		}
	}
	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