27274: 字符串提炼
implementation, http://cs101.openjudge.cn/practice/27274
一天,小北心血来潮,把自己的密码藏在了一串长长的字符串里,请你帮他找到提炼密码的方法吧。字符串s由ASCII的数字和大小写字母组成的,需要按照以下方式提炼出密码:
第一步:将字符串s的第20,21,22,...,2m(索引从1开始,下同)个字符提取出来。其中m=floor(log2(n)),floor(x)表示不大于x的最大整数
第二步:将提取出来的字符按以下方式重新排列:s[20], s[2m], s[21], s[2m-1], s[22], s[2m-2],...
如果经过第一步提取出的字符是0、1、2、3、4,那么重新排列后是:04132;
如果经过第一步提取出的字符是0、1、2、3、4、5,那么重新排列后是:051423。
这样,你就获得了小北的密码!
输入
一个字符串 s (字符串的长度大于0,小于 10^5)
输出
提炼出的密码 s'
样例输入
Sample1 input:
01a2bcd3efghijk4lmnopqrst
Sample1 output:
04132样例输出
Sample2 input:
qwertyuiopasdfghjklzxcvbnmASDFGHJKLQWERTYUIOPZXCVBNM
Sample2 out:
qHwhri提示
tags: implementation
来源: 2023fall tcy
python
import math
s = input()
slen = len(s)
maxp = int(math.log2(slen))
extracted = ""
for i in range(maxp+1):
extracted += s[2**i - 1]
left, right = 0, len(extracted)-1
ns = ""
while left < right:
ns = ns + extracted[left] + extracted[right]
left += 1
right -= 1
if len(extracted) % 2 != 0:
ns += extracted[right]
print(ns)