ABC231

Fまでの6完。久しぶりのrated。ARC/AGC特有の緊張感はないが、ratedの緊張感はがっつりあった。自分の感情がどう動くか楽しみだけど先週からモチベないから大して動かないかな、とか思ってたけどちゃんと緊張してドキドキしてくれた。レーティングが低い状態だとratedが待ち遠しくなる(1900台は十分高いという話もあり、このまま上がれなくなるの怖いなあ)。今回は微減。

A - Water Pressure

printfで%fで出力することを選んだ。けっこう迷った。0.999999みたいなのを避けられるか頭の中で確認した。誤差が許されるの見てなかったー。

B - Election

Nが小さいのでstd::mapで数える。最大値がどれか、もうちょっと楽な実装なかったかな。

ABが簡単でよかった。

C - Counting 2

二分探索。これもシンプルでよい。ratedだと問題文の読み方が雑になる気がする(スピード重視)。

D - Neighbors

グラフとして見たときにパスグラフしかなければよさそう。証明もできないが、実装もどうするか難しい。各頂点の次数を見るだけでは「閉路+パス」みたいのを検出できないので、普通にグラフを構築する。閉路があるか、次数が2より大きかったらダメ。無向グラフなので、DFSの親への辺は閉路ではなく、しかし辺の個数としてはカウントする。

解説に証明ないじゃん!パスグラフだけならそれを横にならべれば構成できてYes。上に書いたダメなやつはNo。他に存在しないことを言えばいいのか。まあ正しそう?証明って何だっけ。

E - Minimal payments

外国だと必ずしも制約満たさないよね(アメリカでは10セントと25セントがあり割り切れない)。上から見ていって(高価な硬貨から払っていって)最初にX円より多く払うことになった場所を全探索することを考える(それが成立すると思わないと解法が存在するとは思えない)。しかし、その次の払い方は決まらない気がする。そもそも、普段僕らがやっている「財布の硬貨の枚数の最小化」とは異なる問題だ。既出な気がするしあまりやりたい問題でもないのでFへ。

メモ化再帰を思いついた。計算量を考える余裕はない(えー)。できればサッと書いて運良くACしてGに行きたい。が、とりあえず書くも動かない。払う一番でかい硬貨の決定がややこしいのよな。例えばXが410なら、100円か500円が最大候補になる。500円玉が存在しないときは100円だけが候補になる。上から見てX以下の硬貨を見つけたらそこで処理。存在すれば一つ上を1枚だけ使うことも試す。あとは、100円が4個か5個かを試す。なんか落ちるので、処理を明快にするためにunordered_mapを60個持つ。mp[k]はk番までの硬貨しか使わないときの答え。なんかサンプルが合ったので提出してWA。1円玉しかなくなったときに分岐していて、そこで一つ上を見るのを忘れていたので直してさっさと提出、AC。問題を解くというより、とりあえずACだけ取ったという感じの立ち回り。こういう問題あんまり好きじゃないのでしょーがない。

解説を見たけど下から考えるのかー!そりゃそうだ。現実でお金を払うときって今の自分はたぶん上から考えてるんだよな。引きずられすぎだ。引きずられてることに全く気づかないのがやばい。

F - Jealous Two

高橋君が嫉妬するものを数えてみる。Bは関係ない。Aで昇順ソートすれば、自分より右にしか嫉妬しない。等しい値があるとき面倒だが、右から順に値が変化した場所を更新していけばいい。包除が浮かぶけどおおむね対称性がありそうで、包除でできるなら直接求めることもできそう。ただ、逆にした場合等しいものも数えるので「自分より右」みたいなことは言えなくて面倒かもしれない。ということで手間はさほど変わらないし包除する。N^2を計算し、高橋君が嫉妬するものと青木君が嫉妬するものの個数を引き、最後に2人とも嫉妬するものを足す。片方だけの計算が、両方のやつの練習になっていてよい。Aでソートして、右から見ていく。自分より右にしか、2人とも嫉妬するものはない。高橋君が嫉妬するやつを追加するときに、青木君にとっての嬉しさをBITに入れていく。ここで座標圧縮が必要なことに気づき心配するが、この問題は初手座圧で答えが変わらないので座圧を貼るだけで済む。なかなかサンプルが合わなかったが、青木君視点だから見ている位置のB_iより小さいものを数えるのだった。ここ最初に考えたときもややこしいと思ってた。

G - Balls in Boxes

Eではなくこっちをやろうとしたけど、想像以上に考察が何も進まず、ヒマでEのやり方を思いついたのでEへ。K回の操作N^K通りそれぞれについて各箱からボールを1個ずつ選ぶ通り数の総和がわかればいい。そういえば制約の10^9が998244353より大きくて不穏に見えたが。