ABC 123 D - Cake 123
XY通りのAi+Bjを降順に並べた数列を(αi)i∈[XY]とするとき、XYZ通りのαi+Cjを大きいほうからK個出力すれば良いことになるが、後者についてはα1,...,αKとC1,...,CZの組み合わせだけチェックすれば十分である。つまり、Ai+Bj (i∈[X],j∈[Y])を降順にソートして(αi)を得てからαi+Cj (i∈[K],j∈[Z])を降順にソートすれば答えになる。計算量はO(XYlog(XY)+KZlog(KZ))。
もっと速い方法がありそうだと思ったが、コンテスト中には思いつけなかったので不全感が残った。解説にある優先度付きキューを使ったO(KlogK)の方法はわかりやすかった。二分探索する方法については(それで計算量が大丈夫とすぐに判断できないあたりも含めて)もう少し考える時間が欲しい感じ。