這是11.17號的題單
4.第四題是字串的問題,只需要找到規律即可,對於每個查詢 k[i],首先計算 a 和 aa:
a 是 (k[i] - 1) // ls,即 k[i] - 1 除以字串長度 ls 的商。這相當於確定 k[i] 在重複字串中屬於第幾個完整的字串塊。
aa 是 bin(a).count("1") % 2,即 a 的二進位制表示中 "1" 的個數取模 2。這用於判斷 a 是否是奇數。
然後計算 b,它是 (k[i] - 1) % ls,即 k[i] - 1 除以字串長度 ls 的餘數。這相當於確定 k[i] 在當前字串塊中的具體位置。
最後程式碼如下:
s = input()
q = int(input())
k = list(map(int, input().split()))
ls = len(s)
for i in range(q):
a = (k[i] - 1) // ls
aa = bin(a).count("1") % 2
b = (k[i] - 1) % ls
if aa % 2 == 0:
print(s[b], end = " ")
elif s[b].isupper():
print(s[b].lower(), end = " ")
else:
print(s[b].upper(), end = " ")
3.這道題其實不難,只要把給定第幾個字串塊與前面的0塊調換位置即可。程式碼如下:
from collections import deque
n, k = map(int, input().split())
s = input()
v=[[s[0]]]
for i in range(1,n):
if s[i]==s[i-1]:
v[-1].append(s[i])
else:
v.append([s[i]])
cnt=0
ans=[]
def f(x):
for xx in x: ans.append(xx[0])
return len(x)
dq=deque(v)
while dq:
x=dq.popleft()
if x[0][0]=='1': k-=1
if k==1:
ans.append(s[:cnt])
y=dq.popleft()
z=dq.popleft()
cnt+=f(x)+f(z)+f(y)
ans.append(s[cnt:])
break
else:
cnt+=len(x)
print(*ans, sep='')