結果

問題 No.58 イカサマなサイコロ
ユーザー kou_kkk
提出日時 2025-07-19 23:13:16
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 29 ms / 5,000 ms
コード長 1,578 bytes
コンパイル時間 4,307 ms
コンパイル使用メモリ 111,952 KB
実行使用メモリ 25,896 KB
最終ジャッジ日時 2025-07-19 23:13:22
合計ジャッジ時間 3,782 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 10
権限があれば一括ダウンロードができます
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc)
Copyright (C) Microsoft Corporation. All rights reserved.

ソースコード

diff #

using System;
 
class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());
        int k = int.Parse(Console.ReadLine());
 
        var dp = new long[n+1, 6*n+1];
        dp[0, 0] = 1;
 
        for (var i = 0; i < n; ++i)
        {
            for (var j = 0; j <= 6*n; ++j)
            {
                if (dp[i, j] != 0)
                {
                    for (var l = 1; l <= 6; ++l)
                    {
                        dp[i+1, j+l] += dp[i, j];
                    }
                }
            }
        }
 
        var dp2 = new long[n+1, 6*n+1];
        dp2[0, 0] = 1;
 
        for (var i = 0; i < k; ++i)
        {
            for (var j = 0; j <= 6*n; ++j)
            {
                if (dp2[i, j] != 0)
                {
                    for (var l = 4; l <= 6; ++l)
                    {
                        dp2[i+1, j+l] += dp2[i, j] * 2;
                    }
                }
            }
        } 
        for (var i = k; i < n; ++i)
        {
            for (var j = 0; j <= 6*n; ++j)
            {
                if (dp2[i, j] != 0)
                {
                    for (var l = 1; l <= 6; ++l)
                    {
                        dp2[i+1, j+l] += dp2[i, j];
                    }
                }
            }
        }
 
        long cnt = 0;
        double ans = 0;
        var x = Math.Pow(6, n*2);
 
        for (var i = n+1; i <= 6*n; ++i)
        {
            cnt += dp[n, i-1];
            ans += cnt * dp2[n, i] / x;
        }
 
        Console.WriteLine(ans);
    }
}
0