ABC182

時間がかかりすぎる。こんなんでレート溶かすの虚しさしかないけど、まあプレイ内容はよかった。

A - twiblr

言われた通りに書くだけだけど、問題が複雑なので大変。AとBどっちがフォロワー数かとか、最初から超えてるケースがないかとか。

B - Almost GCD

「GCD度」の意味をつかむのが大変。そういう表現になった気持ちをつかむか、気持ちは関係なく問題文に書かれた通り実装するか、迷う。今考えると、GCDが2以上ならそれを出力すればいいわけね。どっちみち解法は愚直になるけど。1000を超えると割り切れなくなるので、2から1000まで全探索。最大値ではなく最大になるものを出力する必要があるので、std::pairを使った。

C - To 3

各数字が何個あるかだけが重要なのでstringで受け取って数える。小さな計算時間で解けそうではあるけどきれいな道がすぐには見えない。そのプレッシャーからトイレに行きたくなり、行く。トイレで考えれば難しくはない。そもそも1と4は同一視できた。3で割ったあまりで3種類カウントして、元のNが1あまるなら1を1個か2を2個除く、2あまるなら2を1個か1を2個除く。きれいな(バグらせにくい)実装がわからず同じことをコピペで2回書いてしまった。

D - Wandering

AtCoderらしい天才感があって好き。操作をN回に分けて考えて、正の向きにA_1進む直前の位置をそれぞれ求める(これはS=A_1+A_2+...+A_iを更新していきそれを足していけばいい)。あとは、各操作の中でいつ最大値をとるかわかればいい(これもさっきのSの最大値を更新していけばいい)。ループ内で、更新の順番に必然性が生まれてきれい。

E - Akari

縦横それぞれにセグ木・累積和・二分探索などを使えばできそう。でも最近やってすごく簡単だった記憶があるんだよな(調べると、1か月前のHHKBのEか?)。頑張って思い出すと、4方向に見ていって明かりからブロックまでを照らす。実装は、コピペで4方向全部書く以上に速く書けるのが思いつかず。

F - Valid payments

間に合わず残念。コイン進法でXを表す。1枚で全部払えるコインを使うときは、一番上の位以外を自由にできる感じで、実験しても「それ以外の場所のピッタリに払ったとき使うコイン」がある毎に2倍になりそう。実験がめっちゃ大変だった。普段そうやって払っているのは有利だが、列挙したことはない。大きいお金を使わないときは、必ず一番上の位のコインを使う。同じにも見えるなあ。書いてみるが、サンプルは合わない。ここで、999円みたいなときに10円玉10枚は使えないことに気づく(333円であれば340円のような払い方ができる)。この時点で10分ちょっとしかなく、19191円が何通りかもわからないまま終わった。