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)))