ABC100


そのせいか知らんけどジャッジが重い。D問題のジャッジには10分かかった。参加者は前回のABCも多かったけどね。で、そのせいか知らんけど11位タイという過去最高の順位を取った。初の20分切りと好順位嬉しい。記念の100回目に失敗するのが俺と思っていたけど、やったぜ。

A - Happy Birthday!

Aから難しい(瞬殺できない)。ただまあ図をながめていると、隙間を空けずに取っていくというか、MAX8切れずつ取ったときの取り方から減らして取る取り方ができるので、AもBも8以下ならいいんだろうなと。提出した時点ではここまではっきりとは解けてなかったけど、AC。

B - Ringo's Favorite Numbers

Dは2まで。小さい。Nも小さいから1万の2乗でintに収まる。サンプルで大体の様子もわかる。ただ、問題文を読んだときに感じた難しさとサンプルの様子にギャップがあり、コーナーケースを考えてみると、まさにNが100のときに、100で割り切れる回数が増えてしまう。なので、Nが100のときは1を足して、Dの数だけ100を掛けて、OK。ABCのBでこの引っかけつらそう。しかもこの辺からジャッジがだいぶ重くなっていた。

C - *3 or /2

Bのジャッジを待ちながら問題を読むしかない。そういう試練かもしれん。操作の1行目の3倍を3で割ると誤読したが、2行目の3倍を何回も見ているうちに気づいた。さて、それが誤読だったということは、なんだか異様に簡単だ。サンプルを見て、何回2で割れるかの方針が決まる。計算量もlogが付くだけで大丈夫。ここのジャッジも時間がかかった。ABCDと問題を解くのに時間がかかるようになっていくのと同じように、ジャッジ(が始まるまで)にも時間がかかるようになっていく。

D - Patisserie ABC

えらく難しそうな見た目。Nが1000でxyzの3要素があるので、3乗を2乗に落とすような感じか?絶対値の合計を最大にしたいので、価値が高いケーキを食べたいというよりは、ネタ的に尖ったケーキを食べたいのだろう。りんごさんだし。その辺の解釈はしておかないと、僕も人間だから問題の理解にハードウエアアクセラレータを使えたほうが有利なので。制約は10^10なのでintに収まらない。サンプルにも書いてあった。サンプルを最初のほうだけ軽く読んで解釈に間違いがないか確認。
3要素あるからソートしてもなあ。最初適当に選んで、貪欲に山登りしていくのは?3つの要素全てが同時に動くからねえ。どれか固定できればいいんだけど。ていうか8通り全部やればよくない?絶対値ではなく単に合計だったとしてみよう。それは3つの値の合計が高い順にM個選べばいいだけに思える。なら8通りやればいいだろう。structを作り、xyzの他に合計のsを持たせる。kで8回のループを作りkの指定ビットが立っているかどうかでその要素の符号(どっちを目指すか)を決める。kに従って合計をsに入れたらsでソート。順番はどうでもいいので毎回ソートで順番を破壊してもいい。sを大きい順に取って合計を得てその最大が答え。答えは0以上なので初期値は0でいい。サンプルが合ったので即提出。ドキドキ。心臓ナントカで殺す気か。いやそれほどではないけど。これでWAだったらひどいぞ。どうやってもマイナスになる場合とか大丈夫だよなと今さら確認。開始15分で提出し開始20分を過ぎてもWJのまま。大丈夫そうではあるけど。さすがに不毛なので別のことをやる。開始25分でジャッジが始まりAC。順位表を見ると11位。WAがない全完でも順位が下がることあるっけと考えてた。ジャッジが詰まっていたのはWAが多かったかららしい?