atcoder ABC314 C - Rotate Colored Subsequenceの説明

atcoder.jp

・説明
moziで色ごとに文字を管理して、indeで文字のもともとのインデックスを管理する。プログラムは

for i in range(n):
  mozi[c[i]-1].append(s[i])
  inde[c[i]-1].append(i)

で色ごとに文字をmoziリストにいれて、

for i in range(m):
  mozi[i]=mozi[i][-1:]+mozi[i][:-1]

で文字をずらして、

fans=['' for _ in range(n)]
for i in range(m):
  for j in range(len(inde[i])):
    fans[inde[i][j]]=mozi[i][j]

でもともとのインデックスを元にfansに答えを入れていく。

・全体のコード

n,m=map(int,input().split())
s=input()
c=list(map(int,input().split()))


mozi=[[] for _ in range(m)]
inde=[[] for _ in range(m)]


for i in range(n):
  mozi[c[i]-1].append(s[i])
  inde[c[i]-1].append(i)
#print(mozi,inde)  

  
for i in range(m):
  mozi[i]=mozi[i][-1:]+mozi[i][:-1]
#print(mozi,inde)   


fans=['' for _ in range(n)]
for i in range(m):
  for j in range(len(inde[i])):
    fans[inde[i][j]]=mozi[i][j]
print("".join(fans))