結果
順位 228th / 5737 パフォーマンス 2034 レーティング 1753 → 1784(+31)
E問題までの5完。F問題も解きたかったけど、終了後10分くらい粘ってもダメだったのでそんなに行けそうでもなかった。
A - Beginner
最初提示されているのが表示レーティングかと思って入力例1の結果が全然違ってびっくりした。
B - Digits
えー、難しくない? でも割っていくだけで良かったのか。余計な実装をしてしまった。
C - Rally
うぉー座標に関して全探索。どうでもいいけど最近配列の入力を
vector<int64_t> X(N); for (int64_t& x : X) { cin >> x; }
と受け取るのがマイブーム。
D - Bouquet
最初は脳死で事前計算するCombinationを持ってきて、いやでもダメじゃんとなって普通に計算する方のCombinationを計算。なんかいまいち綺麗に書ききれなかったな。
E - Roaming
わりと早い段階で「最終的に空になる部屋が個」の場合の数を計算すれば解けそうという観点が出てきた。それで考えていくと、空になる部屋を選ぶnCiと、人が部屋のうちのどこかに属する{n - 1}_C_iが見えるので勝ち。後ろのやつを考えるとき僕もooo|||oooみたいな丸と仕切りの図を書いてしまうね。
の場合コーナーケースだとか? 全室埋まりが作れないというところかな? 全然気づかないでやっていた。
無駄なMODpowを削除しないまま提出してしまったのが悔やまれる。コードゴルフをやるつもりはないけどできるだけ無駄な記述はない状態で出したい。
F - Modularness
クエリ問題になっている意味が何かあるのかなとちょっと疑ったけど、普通に各クエリをで解くことができそうと判断してそれに向かう。
クエリがとして、足されるがで周期が回るので、の倍数でどこかループすることがわかる。そのループ周期はみたいな感じで書けるので、とで最小公倍数をどうのこうのすると周期がわかるんですね〜。
あとは条件に合うものを数える方法を考える。初めにをで割った余りに加工しておくんだけど、のときはではなくにしておけば、失敗するときはなんかで割った商が増える感じになるのでそれを上手く計算すればできる。
しかし入力例2とかで1ズレたり合ったりするので終わり。を1小さくするべきなのかそうじゃないのかがわからなかった。
コンテスト終わってから気づいたけどこれループ周期とかを考える必要はないんですね。オーバーフローしないかとか心配になったんだけど、の各要素が最大で、全体が個で、それを個足しうるからで大丈夫なんだ。32行で綺麗に書けたので自分としてはこれで満足。でもfinal
はC++の予約語? にあるから変数名にするのはやめようねとAtCoderのコード表示を見ていて思った。