Codeforces Round #555 (Div. 3) - B. Long Number

問題概要

Problem - B - Codeforces
1から9までのn桁からなる数値を1から9までの各桁に対応したMAPに置き換えることができる。
1から9までのn桁からなる数値から特定の範囲を抜き出して置き換えた際に最大となる数値を答えよ。
ただし、特定の範囲は1度しか置き換えることができない。

解法

上位の桁から置き換えるMAPの値をを比較した際に
MAPの値の方が大きい場合、MAPの値へ置き換える。
以降は、置き換えができなくなったタイミング(等しい値の場合は同じ数値で置き換える)で終了する。

What is the maximum possible number you can obtain applying this operation no more than once?

google翻訳で食わせた際には、

この操作を複数回適用して取得できる最大数はいくつですか。

と出てくるので注意が必要。

コード

n = int(input())
a = list(input())
b = list(map(str, input().split()))
d = defaultdict(int)

for i, s in enumerate(b):
    d[i + 1] = s
flg = False
for i, s in enumerate(a):
    if int(s) < int(d[int(s)]):
        a[i] = d[int(s)]
        flg = True
    elif flg and int(s) > int(d[int(s)]):
        break
print(''.join(a))