Atcoder 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='')
posted @ 2024-11-17 11:46  fafatadie  阅读(14)  评论(0编辑  收藏  举报