P1928 外星密码
时间:2023.10.5
题目地址:外星密码
题目分析
很经典一个解压缩问题,这题算是比较基本的递归,有兴趣可以去看看csp认证的一道大模拟题202305-3 解压缩(需要登陆)。
但是这道题针对C++这个语言还是很友好的,它们获取数据是一个一个输入,在这个过程中,就可以完成递归,而用python的话还要一整个读取。然后,在一个一个读,如果按照上述递归的话,时间很长,很可能会超时。
所以,我就用了一个偏方 (还是很巧妙的,哈哈哈哈哈) ,通过从中间逐步向外进行压缩,就把这个题目纯纯当一个模拟题了,每次找到最里面
′
[
′
'['
′[′ 和
′
]
′
']'
′]′ 的索引,找到了那就简单了,解一下就行了,再替换一下就可以了。
过了,芜湖~~~~。
代码
# 压缩函数
def unzip(s):
s = s.strip('[]')
cout = 0
for t in s:
if t in [f'{i}' for i in range(10)]:
cout += 1
temp = s[cout:]
n = int(s[:cout])
return temp*n
s = input()
while True:
# 没有了就可以弹出了
try:
left = s.rindex('[') # string.rindex()是从右向左找
right = s.index(']', left)
except:
break
# 获取此时的压缩片段,例:’[2ef]‘
temp = s[left:right+1]
# 将压缩片段解开,并替换
s = s.replace(temp, unzip(temp))
print(s)