C - AtCoder Riko Editorial
by
vwxyz
原案:ynymxiaolongbao
\(A_1,A_2,\dots,A_N\) はソートされているとして一般性を失いません。
すべての AtCoderりこが \(2\) 本に分かれたかどうかで場合分けして考えます。
\((1)\)すべての AtCoderりこが \(2\) 本に分かれた場合
まず、\(N\) は偶数であることが必要です。
長さ \(A_1\) の AtCoderりことペアになっていた AtCoderりこの長さは \(A_N\) 以下なので、 \(L \leq A_1+A_N\) です。
長さ \(A_N\) の AtCoderりことペアになっていた AtCoderりこについても同様に考えると、\(A_1+A_N \leq L\) です。
よって、\(A_1+A_N=L\) が成り立ち、長さ \(A_1,A_N\) の AtCoderりこをペアとしてよいことがわかります。
同様に考えると、\((A_2,A_{N-1}),(A_3,A_{N-2}) \dots,(A_{\frac{N}{2}},A_{\frac{N}{2}+1})\) がペアになり、各ペアの合計が \(A_1+A_N\) に等しい必要があります。
逆に、これが成り立つならば \(L=A_1+A_N\) として条件を満たすこともわかります。
\((2)\) \(2\) 本に分かれなかった AtCoderりこが存在する場合
最も長い AtCoderりこが \(2\) 本に分かれなかった AtCoderりこなので、\(L=A_N\) がわかります。
また、長さが \(A_N\) であるような AtCoderりこは \(1\) 本のまま残り、長さが \(A_N\) 未満の AtCoderりこは \(2\) 本に分かれた AtCoderりこであるということもわかります。
長さが \(A_N\) 未満であるような AtCoderりこについて、(1)と同様に判定することができます。
これらをそれぞれ判定することで、問題を解くことができます。
ソートがボトルネックで、計算量は \(O(N\log N)\) です。
posted:
last update:
