第十五届蓝桥杯省赛PythonB组B题【数字串个数】题解(AC)

在这里插入图片描述

n = 10000 n = 10000 n=10000

法一

  1. 枚举 3 3 3 的个数以及 7 7 7 的个数,假设 3 3 3 的个数为 i i i 7 7 7 的个数为 j j j,那么非 3 , 7 3, 7 3,7 的个数即为 n − i − j n - i - j nij
  2. 在长度为 n n n 的字符串中选取 i i i 的方案数为 C n i C^i_n Cni,在剩余 n − i n - i ni 个位置选取 j j j 个的方案数为 C n − i j C^j_{n - i} Cnij,剩余位置个数为 n − i − j n - i - j nij,可选择的内容为 { 1 , 2 , 4 , 5 , 6 , 8 , 9 } \{1, 2, 4, 5, 6, 8, 9\} {1,2,4,5,6,8,9},共七个,故方案数为 7 n − i − j 7^{n - i - j} 7nij,乘积即为答案。

法二

  1. 枚举 3 3 3 7 7 7 的个数之和,假设 3 3 3 7 7 7 的个数和为 i i i,那么非 3 , 7 3, 7 3,7 的个数即为 n − i n - i ni
  2. 在长度为 n n n 的字符串中选取 i i i 个的方案数为 C n i C^i_n Cni,在剩余 n − i n-i ni 个位置选取非 3 , 7 3, 7 3,7 的方案数为 7 n − i 7^{n - i} 7ni
  3. 3 , 7 3, 7 3,7 的个数和为 i i i,假设题目无要求 3 , 7 3, 7 3,7 最少各为一个,那么每个位置有两种选择,故方案数为 2 i 2^i 2i,由于 2 i 2^i 2i 种方案中存在全 3 3 3 和全 7 7 7 的情况,所有有效方案数为 2 i − 2 2^i - 2 2i2

法一

MOD = int(1e9 + 7)

def qmi(a, b):
    res = 1
    while b > 0:
        if b & 1:
            res = res * a % MOD
        a = a * a % MOD
        b >>= 1
    return res

n = 10000
N = int(1e4 + 10)
f = [[0 for i in range(N)] for i in range(N)]
def init():
    for i in range(0, n + 1):
        for j in range(0, i + 1):
            if j == 0:
                f[i][j] = 1
            else:
                f[i][j] = (f[i - 1][j] + f[i - 1][j - 1]) % MOD

init()

res = 0
for i in range(1, n - 1 + 1):
    for j in range(1, n - i + 1):
        res = (res + f[n][i] * f[n - i][j] * qmi(7, n - i - j)) % MOD

print(res)

法二

MOD = int(1e9 + 7)

def qmi(a, b):
    res = 1
    while b > 0:
        if b & 1:
            res = res * a % MOD
        a = a * a % MOD
        b >>= 1
    return res

n = 10000
N = int(1e4 + 10)
f = [[0 for i in range(N)] for i in range(N)]
def init():
    for i in range(0, n + 1):
        for j in range(0, i + 1):
            if j == 0:
                f[i][j] = 1
            else:
                f[i][j] = (f[i - 1][j] + f[i - 1][j - 1]) % MOD

init()

res = 0
for i in range(2, n + 1):
    res = (res + f[n][i] * qmi(7, n - i) * (qmi(2, i) - 2)) % MOD

print(res)

运行结果:

157509472

【在线测评】

在这里插入图片描述

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值