ABC089

A - Grouping 2

読むと割り算っぽい。

ooo
ooo
o

こんな図(頭の中では縦向き)が思い浮かび、通常の除算(切り捨て)でいいと判断した。
問題名に2が付くことが増えてきたね。累積問題数が増えてきてさすがに被るんだろうね。

B - Hina Arare

4種類の文字が出現するのはB問題にしては難しすぎる!PWGが存在するという制約は、3種類以上だと保証するものだと最初思ったけど、よく考えるとWGYの3種類というケースは存在しないね(Yの有無だけで判定できる)。コンテスト中はそこまで考えが回らなかった。だって問題文が複雑でビビってたから。さらに ==3 を付け忘れて1回サンプル通らなかった。そういえば、単に何種類の文字があったか数えるだけでもよかったね。まさかこんなに簡単だったとはなあ。まあそれを見抜くゲームでもあるから仕方ないね。

C - March

Bと似た入力。なんか難しそう。問題文を読むのに時間がかかった。なんというか、最後の手段としてnext_permutationを使った。制約で同じ名前の人がいないのを確認して、MARCHの5文字のうち3つを選ぶとしてそれぞれをまあ掛ければいいと。ある文字で始まるのが0人だったときは掛けて0になるのでよしと軽く確認。チキン戦法のつもりでint64_tを使ったが、よく見ると10^5だから普通に超えてくる。Cでしれっと64bit要求してくるかあ。終わってみると、なんで6分もかかってるんだろう。悩んだんだろうなあ。あと実装もそこそこ重い。

D - Practical Skill Test

「D の倍数であることは保証される」ってどこで使うんだろう、使わなくてもいいのかな(使うと実装がすごく軽くなったりするのかな)、とか思ってたくらいで、駒の動かし方は解けると思ったあとに読んだ。移動のシーケンス毎に累積和みたいのを持てばいいと、それで解けたと最初に思ってしまったため、具体的な移動方法がお留守になった。まさか3,13,23,33のような単純な移動の仕方とは。Aを2次元配列に読み込む必要はなかったのだ。難しいので考察・実装に10分以上かかるのは仕方ないとして、l+=d と書くべきところ l++ と書いて5分以上溶かしたんだよなあ。
aを0-indexedにしてから b[a] = i * w + j; とする。この座標の情報は魔力の消費量を得るときだけ必要になる。移動シーケンスはd種類。それぞれについてスタートの数字からの消費量の累積和を順に計算できる。出力は引くだけ。