Skip to content

122 周赛

第二题

真没想到第二题花了那么多时间。思路很简单,只要末三位能被 8 整除,那么这个数字就能被 8 整除。所以目的就是在数字中查看是否存在这三位。

我最开始的想法是,既然只有三位,那么直接暴力出所有可能,并保存成树的结构,然后在数字中从右往左查找。可惜 coding 不出来。

然后就想着,直接使用正则吧,利用 vscode 的批操作,直接生成所有的正则,结果又不成功,最后发现是因为我忽略了两位数,添加上去后就通过了。

但最后看别人代码时,发现别人的 coding 完美符合我的想法,但我却 coding 不出来……

py
number = input().strip()

def solve():
    if '0' in number:
        print('YES')
        print('0')
        return
    if '8' in number:
        print('YES')
        print('8')
        return

    for x in range(16, 1000, 8):
        tail = str(x)
        # 直接通过一个 idx 来检索,多么方便易懂!
        idx = 0
        for n in number:
            if idx < len(tail) and n == tail[idx]:
                idx += 1
        if idx == len(tail):
            print('YES')
            print(tail)
            return
    print('NO')

solve()

第三题

看完题意后已经隐隐约约的感觉到答案会很简单,能感觉出答案应该和 DNA 上有多少位不同字符有关。本以为会是排列组合,但真没想到只是简单的乘法……

假设 s 是 AG,则 t 可以是 AG, GA, AA, GG

点击查看别人的题解

py
n = int(input())
s = input()

occurTime = sorted([
    s.count('A'),
    s.count('T'),
    s.count('C'),
    s.count('G')
])

if occurTime[3] > occurTime[2]:
    print(1)
else:
    equal_num = occurTime.count(occurTime[3])
    print(pow(equal_num, n, int(1e9+7)))