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\) になります。
アルゴリズム
- 入力を受け取る。
- 能力値のリスト \(A\) を降順にソートする。
- 上位 \(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: