ABC134 C - Exception Handling

備忘録

問題

atcoder.jp

回答

import sys
import os
import copy

def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N = int(sys.stdin.readline().rstrip())
    A = [int(sys.stdin.readline().rstrip()) for _ in range(N)]
    B = copy.copy(A)
    A.sort(reverse=True)
    f = A[0]
    s = A[1]

    for n in range(N):
        t = B[n]
        if f == t:
            print(s)
        else:
            print(f)


if __name__ == '__main__':
    main()

考え方

長さNの整数列Aで、整数列のある要素が一つ除かれた時の最大値は、
常に下記の2パターン。

  1. 整数列Aの最大値
  2. 整数列Aの2番目に大きい値

そのため、あらかじめ、整数列の最大値と2番目に大きい値を取り出しておき、
整数列を上から順に

  • 最大値と一致した場合は2番目に大きい値を出力
  • 最大値と一致しない場合は最大値を出力

することで、回答することが出来る。

ちなみに、sliceで頑張るとLTEになる。。。

Submission #10804529 - AtCoder Beginner Contest 134