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