結果

問題 No.241 出席番号(1)
ユーザー かえる☔
提出日時 2025-05-05 12:35:07
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,505 bytes
コンパイル時間 618 ms
コンパイル使用メモリ 82,248 KB
実行使用メモリ 54,592 KB
最終ジャッジ日時 2025-05-05 12:35:12
合計ジャッジ時間 4,335 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 18 WA * 11
権限があれば一括ダウンロードができます

ソースコード

diff #

from itertools import permutations

def main():
    N = int(input())
    A = [int(input()) for _ in range(N)]

    for i, a in enumerate(A):
        if a >= N:
            cands = list(range(N))
            ans = [-1]*N

            for j, b in enumerate(A):
                if i == j:
                    continue
                if cands[-1] == b:
                    ans.append(cands.pop(-2))
                else:
                    ans.append(cands.pop())
            ans[i] = cands.pop()
            return ans


    for a, b in zip(A, A[1:]):
        if a != b:
            break
    else: # 全て同じ番号なら
        return [-1]

    if N == 1:
        return [0]
    elif N == 2:
        if A[0] == 0:
            return [1, 0]
        else:
            return [0, 1]
    

    idx = [0]
    for i, a in enumerate(A):
        if not i:
            continue
        if a != A[0]:
            idx.append(i)
            break
    for i in range(N):
        if i not in idx:
            idx.append(i)
            break
    
    ans = [-1]*N
    cands = list(range(N))
    for i in range(N):
        if i in idx:
            continue
        if cands[-1] == A[i]:
            ans[i] = cands.pop(-2)
        else:
            ans[i] = cands.pop()
    for s in permutations(idx):
        for i in range(3):
            if A[s[i]] == cands[i]:
                break
        else:
            for i in range(3):
                ans[s[i]] = cands[i]
            return ans

print(*main(), sep="\n")
0