ABC412 C~F問題 思考過程
概要
ABC412で問題文を一目読んだ時、どういう思考を経て正解に至ったのかを文章化してみました。ABCで良い成績を取りたい人の参考になればと思います。
C - Giant Domino
考えたこと
- 変数
を
から
に変化させるみたいなタイプの問題で、貪欲法(変化させられる値のうち最大の物を選ぶ)でよい。
- 値をソートしてlower_boundで検索すれば良さそう。
実装
としてソート、whileループで
を
以下の最大の値で更新。更新できなかったら-1。終了条件は
であること。
- 大きいドミノを倒すためにドミノを差し込むイメージで基本的に
が増加していくように並べるが、
のケースもあるので壊れないか一応確認し、提出。
コメント
解説は操作回数が 回であることを使っていたが、C問題でそれが出るのは少し珍しい気がする。というよりは、lower_boundによる検索を差し置いて操作回数が
回で~という解説に違和感があるというべきか。
D - Make 2-Regular Graph
考えたこと
- それっぽい(効率的な)解法がすぐ出てこない&
が小さいので、どうせD問題でありがちな全探索だけの問題だろう。
実装
- すべての次数が2のグラフはいくつかのサイクルになる。DFSでサイクルを順に生成すれば列挙できるか。
- なんか大変なので方針転換。
通りの辺の選び方を全部調べる。(
が間に合うというのを過去に何回か見た記憶があるので
も大丈夫と判断)
- 長さ
の01列であって0が
個、1が
個のものをnext_permutationで回して1に対応する辺が存在するものとして判定・求値する。
コメント
長さ2のサイクルが出来てはいけないのを見落としていたので、方針転換によって偶然ペナルティを免れたことになる。
E - LCM Sequence
考えたこと
- (
は単調非減少なので)
となる
を考えればよくて、これは素数
, 正整数
を用いて
と表せるのが条件。
の場合があるのと、
という制約があるあたり区間篩をさせられると思って間違いなさそう。
として区間篩って
だっけ?
だっけ?になったが、TL見たら4秒だったのでどちらにせよ間に合うでしょうと判断。
は、
なので全部調べてしまって良い。
実装
, すなわち
の場合に変なことが起きたら嫌なのでとりあえず
ならば1を出力して終了させる。
以下の素数を列挙。
- 区間篩で素数をカウント。
の列挙をする。
の間
を計算し続けたが、オーバーフローするので128bit整数を使用。
コメント
前に区間篩を見たのはABC-GだったのでEで出てきて少しびっくり。
F - Socks 4
考えたこと
- この辺によく置かれる、自己ループを処理しないといけない期待値DPだろう。
なのでこれで2乗っぽい。実際、
] を今持ってる靴下が全部で
枚あるときの期待値とするとうまく考えられる。
実装
- 経験則的に、
の降順に処理することにする。
- 全部で
枚存在する靴下がないのに
] を扱うと壊れるかもしれないので丁寧に弾く。(
] を決めるときや遷移のときに存在するか調べて存在しない場合はcontinue)
- 操作の結果を遷移のタイプに応じて3つに分類。
- より枚数の多い靴下を選んで、より大きな値のキーに遷移
- 今持ってる靴下を選んで、終了
- 今持ってる靴下以外で、今持ってる靴下と枚数が同じかより少ない靴下を選んでキーの変化なし(自己ループ)
- 確率
で成功する試行を成功するまで繰り返す場合、試行回数の期待値は?という問題の答えは
となることが有名。上記3を失敗、それ以外を成功と見なせば自己ループは解決する。
- 1の遷移を考える。念のため
にならないようにしたくなり、少し考えると
ごとに遷移の係数の分母が全部同じだったのでその逆元だけ前計算してやった。
コメント
というのを見た瞬間に
の値をキーとするDPだろうという思考になって、
が想定という気がしなかった。
まとめ
頭を使う必要が無いと早く解けるということがよく分かりますね。
AtCoderで頂いた賞金・賞品
ABCでの上位賞金廃止が話題になったのですが, そういえば自分は今までどれだけ貰ったのだろうという気持ちになったので.
メールとか頑張って遡りましたが漏れがありそうです(対応の取れないアマギフ追加履歴がある).
| 日付 | コンテスト名 | 順位 | 賞金・賞品 |
|---|---|---|---|
| 2020/10/10 | HHKB プログラミングコンテスト 2020 | 総合20位 | HHKB |
| 2020/11/07 | HACK TO THE FUTURE 2021 予選 | 抽選 | 3,000円 |
| 2021/09/18 | サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219) | 総合6位・学生3位 | 20,000円 |
| 2021/11/13 | キーエンス プログラミング コンテスト2021-Nov. | 総合5位 | 10,000円 |
| 2021/11/20 | トヨタシステムズプログラミングコンテスト2021(AtCoder Beginner Contest 228) | 総合4位・学生2位 | 120,000円 |
| 2023/11/19 | ALGO ARTIS プログラミングコンテスト2023 秋 (AtCoder Regular Contest 168) | 抽選 | 5,000円 |
ちなみに, 2022年の3月頃から2024年の1月頃まではABC-Wをやっていました. 会う人会う人に橙~赤になると賞金だけでかなり貰えるんじゃないかと聞かれがちなのですが, (上記期間を考慮しても)全く以てそんなことはありません.
京都旅行(2024/2/20-2024/2/21)
コンテストや個人的な楽しみのためではなく, 所用で京都を訪れるついでに観光を少し行った.
続きを読む二項定理の問題ツイートを組合せ論的解釈と多項式・FPSで解く
今日は二項定理に関しての挑戦です!
— 根本大貴 (@8z2Ie58UFRGxfzm) 2023年9月28日
10問あります!何問解けますか?
4問以上解ける人はCの扱いは特に問題ないと思います!
7問以上解ける人は本当に数学が好きな人なんだろうなと思いますね!#数学#何問解けますか#美しい等式 pic.twitter.com/Mx1UNjtRKb
このツイートを目にしたので, 解いてみました.
9問目は式が違うようなのでこれから解こうという方はお気を付けください.
(9)の最後のC(n,n)の部分はC(n,l)の誤りです。
— 根本大貴 (@8z2Ie58UFRGxfzm) 2023年9月29日
申し訳ございません。
最近競プロerの間でFPSを勉強しようという流れがあるようなのでFPSを用いた解法も載せようと思ったのですが, 多項式の範疇に収まるのがほとんどです. また, 最後にそれっぽい競プロの問題を何問か紹介します.
続きを読む