我是D题学霸题问题的提出者

对于101010 ^ {10},注意到k最大为90,所以我们可以通过打表获得答案

或者预处理前5位所有数的数位和为x的个数,然后根据给出的k并且枚举x以及k-x来计算答案

对于101810 ^ {18}, 我们可以采用数位dp,参数为当前已经有的数位和n_k,以及填的数字个数n_x

枚举当前填的数为i(0≤i≤90 \leq i \leq 9)

转移方程为 dp[n_k][n_x] -> dp[n_k + i][n_x + 1]

答案即为dp[18][k], 复杂度为O(10 * 18 * min(k, 9 * 18) * T)

对于1010710 ^ {10 ^ 7}​, 要用到一些排列组合算法

首先我们假设每一位都可以填任意数字(包括大于等于10的数字),那么通过隔板法计算答案为C(107+k−1,k)C(10 ^ 7 + k - 1, k)

然后通过容斥原理减去位置超过10的数字的个数,同时注意到对于每一种情况,他们的概率都是相同的,那么我们可以枚举有i位数字超过10

答案就是再加上∑i=1107\sum_{i = 1}^{10^7}(−1)i(-1) ^ i * C(107+k−1−10∗i,k)C(10 ^ 7 + k - 1 - 10 * i, k)​

因为整体难度过高,所以这题的数据范围从1010710 ^ {10 ^ 7}砍到了101810 ^ {18}最后又砍到了101010 ^ {10}

0 条评论

目前还没有评论...

信息

ID
111
时间
ms
内存
MiB
难度
1
标签
(无)
递交数
99
已通过
77
上传者