わかさぎのブログ

プログラミング、Atcoderの勉強とか

AtCoder Beginner Contest 276 C - Previous Permutation

N=int(input())
p=list(map(int,input().split()))

def prev_permutation(a: list, l: int = 0, r: int = None) -> bool:
    if r is None:
        r = len(a) - 1
    for i in range(r - 1, l - 1, -1):
        if a[i] > a[i + 1]:
            for j in range(r, i, -1):
                if a[i] > a[j]:
                    a[i], a[j] = a[j], a[i]
                    p, q = i + 1, r
                    while p < q:
                        a[p], a[q] = a[q], a[p]
                        p += 1
                        q -= 1
                    return True
    return False

prev_permutation(p)

print(*p)

考え方

C++のprev_permutationの実装をする。
こちらのサイトの記事のコードをそのまま使わせていただいた。

strangerxxx.hateblo.jp