第一行输入两个正整数
代表骰子数量、目标点数。
输出一个整数,代表小歪投出总点数之和为
的概率。
可以证明答案可以表示为一个不可约分数
,为了避免精度问题,请直接输出整数
作为答案,其中
,
是满足
的整数。
更具体地,你需要找到一个整数
满足
对
取模等于
,您可以查看样例解释得到更具体的说明。
5 5
490869345
在这个样例中,唯一一种可以投掷出
点的情况为,投掷一轮,且每一个骰子的点数均为
,因此概率为
。
我们可以找到,
,对
取模后为
。所以输出即为
。
1 3
893518525
在这个样例中,有且仅有以下四种投掷方法:
投掷一轮,且投出
点;
投掷两轮,第一轮投出
点,第二轮投出
点;
投掷两轮,第一轮投出
点,第二轮投出
点;
投掷三轮,第一轮投出
点,第二轮投出
点,第三轮投出
点。
总概率为
。
2 3
55555556
在这个样例中,有且仅有以下两种投掷方法:
投掷一轮,第一个筛子投出
点,第二个筛子投出
点;
投掷一轮,第一个筛子投出
点,第二个筛子投出
点。
总概率为
。
k, p = map(int, input().split()) MOD = 10 ** 9 + 7 import math dp = [[0 for _ in range(p + 1)] for _ in range(k + 1)] for x in range(1, min(7, p + 1)): dp[1][x] = 1 for i in range(2, k + 1): for j in range(i, min(6 * i + 1, p + 1)): for x in range(max(1, j - 6), j): dp[i][j] += dp[i - 1][x] fenzi = dp[k][p] fenmu = 6 ** k g = math.gcd(fenmu, fenzi) fenmu = fenmu // g fenzi = fenzi // g fenzi = fenzi % MOD def mod_pow(a, b, mod): result = 1 a = a % mod while b > 0: if b % 2 == 1: result = (result * a) % mod a = (a * a) % mod b = b // 2 return result inv_fenmu = mod_pow(fenmu, MOD - 2, MOD) final_result = (inv_fenmu * fenzi) % MOD print(final_result)有没有老哥帮我看看代码哪里有问题,跑下来对了11个,无奈了