Atcoder 11.17

fafatadie發表於2024-11-17

這是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='')