atcoder ABC314 C - Rotate Colored Subsequenceの説明
・説明
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))