Official

C - 最強ペアの結成 / Formation of the Strongest Pair Editorial by admin

Qwen3-Coder-480B

概要

\(N\) 人のメンバーの中から異なる \(2\) 人を選び、その能力値の和が最大になるようにペアを作る問題。

考察

この問題では、すべてのペアを試すと、組み合わせの数が \(_NC_2 = \frac{N(N-1)}{2}\) となり、最大で約 \(2 \times 10^{10}\) 通りになるため、時間制限内に計算しきれません(TLE)。
しかし、実は「能力値の和が最大になるペア」とは、最も高い能力値を持つ \(2\) 人のメンバーを選ぶことで実現できます。
したがって、配列を降順にソートして上位 \(2\) つの値を足し合わせるだけで答えが得られます。

例えば、入力が 5 3 8 1 の場合、降順に並び替えると 8 5 3 1 となり、最大の和は \(8 + 5 = 13\) になります。

アルゴリズム

  1. 入力を受け取る。
  2. 能力値のリスト \(A\) を降順にソートする。
  3. 上位 \(2\) つの要素の和 \(A[0] + A[1]\) を出力する。

計算量

  • 時間計算量: \(O(N \log N)\)(ソートにかかる時間)
  • 空間計算量: \(O(1)\)(入力以外の追加的な大きなメモリを使用しない)

実装のポイント

  • ソートの際に降順にするために sort(reverse=True) を使用している。

  • 入力の受け取りは map(int, input().split()) を用いて効率的に行っている。

    ソースコード

N = int(input())
A = list(map(int, input().split()))
A.sort(reverse=True)
print(A[0] + A[1])

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: