AtCoder Beginner Contest 404(Promotion for Engineer Guild)Eで右側へ行けると誤読して時間を食う。Gは牛ゲーに見えるけど、どういう最短経路に帰着できるか分からず。
— titia (@titia_til) May 3, 2025
B 回転四通り試す。
C 次数は2か? 全頂点繋がっているか?
D 2^(2*N)全探索
E すぐ左の1へ行くまでの手数を求めていく。
titiaのノート
2025年5月7日水曜日
AtCoder Beginner Contest 404(Promotion for Engineer Guild)
Eまで五完。
コンテスト後のツイート
解説AC。解説放送も見た。
分割数全部調べる方法は理解できたけれど、DP内でDPする方法の方が理解できず苦戦した。
結局自分で(再帰で)書いて見たらACコードは書けたけど、かなり難しく感じた。
残りターンT回、残り押さなくてはいけない回数K回のときの勝率をcalc(T,K)、とし、
(残りターンT回のとき)残りボタンを押す回数M回、kai回押す場所を決め、残り押さなくてはいけない回数x回のときの勝率をcalc2(M,kai,x)という関数を定義し、計算した。
引っ掛かっていたのは、kaiという変数が必要なこと。
kai回当たらなかった場合、当たりのボタンはN-kai個の中に含まれるので、当たりの確率は上がっているはず。
解説や解説放送のDPではこれをどう処理しているのかが分からなかったので、必要ないのか? と思ったけど、やっぱり必要でした。
snukeさんのコードだと、26行目に(n-i)を掛けているのがそれに当たるんですね。
再帰だと(多分)同等なコードが書けるけど、このDPを書くのは難しい……。確率DPは再帰じゃないと書けないかもしれない。
解説放送を見てAC。
牛ゲーは、解説を見れば理解できるけど自力で構成するのは難しい。
牛ゲーじゃないかと思ったときは、けんちょんさんのこの記事を見るのが良いかもしれない。
2025年5月3日土曜日
yukicoder contest 466 オムニバスコンテスト
ABDの三完。
No.3134 二分探索木
自力AC。コンテスト中は思いつかなかった。
二分探索木を構築する部分が難しい。
単純な方針だとできなそうに思えたため、SortedSetを使う方針を考えたら上手くいった。
使ってなさそうな提出もあるけど、大抵の提出では使ってそうだし、まあ良いかな(?)
※逆順列のCartesianTreeを作ると良いらしいです。
No.3137 Non-Intersect Chord Triangle Game
解説AC。
葵ちゃんの行動を誤読していたのでそもそもダメだが、正しく捉えていたとしても解けたとは思えない。
小さく、かつ弦のない円で実験したとき、2頂点、6頂点で茜ちゃんが勝つ、と正しく把握できたら考察を進められそう。
2025年4月29日火曜日
AtCoder Beginner Contest 403(Promotion of AtCoder Career Design DAY)
Fまで六完。
コンテスト後のツイート
AtCoder Beginner Contest 403(Promotion of AtCoder Career Design DAY) Fまで。
— titia (@titia_til) April 27, 2025
C Xがクエリ2で指名されたか、(X,Y)がクエリ3で指定されたか。
D Counterを使い、連結成分ごとDP
E Trie木
F 最初BFSで全列挙しようとしたりしてダメ。そのまま掛け算できるかで分けるとDPできる。
G - Odd Position Sum Query
解説放送を見てAC。
この前のこたつがめさんの解説放送で、セグメント木≒Binary Trieだという話を聞いていた。知識はあったので解けなくてはいけない問題だった。
ただ、そもそも、値が小さければ普通のセグメント木で解ける、ってこと自体思いついてなかったんだよね……。
BrainPad プログラミングコンテスト 2025 (AtCoder Heuristic Contest 046)
384位。終了間際の提出がTLEになってしまい悲しい。
コンテスト後のツイート
BrainPad プログラミングコンテスト 2025 (AtCoder Heuristic Contest 046)
— titia (@titia_til) April 26, 2025
BFSでブロックを置かない経路を求めた後、序盤から見て行って、ブロックを置いた方が点数が向上するなら更新、を書いていました。
五分前くらいに書き終ったけど、提出したらTLEが出てダメでした。
コンテスト中考えていた提出でバグがなかったら81位相当だった。
https://t.co/yIqj6QO9az
— titia (@titia_til) April 26, 2025
コンテスト中のコード、バグがなかったから217445点で81位だったみたい。
本番コードに二行足しただけなんだけど、ChatGPTと一時間くらい相談してやっとTLEの原因に気付いたので、近くはなかった。
落ち着けば気付けたかもしれないが、コンテスト終盤に落ち着けるはずもなし。
惜しかったようで惜しくなかったのでは、考えていた方針はそれほど悪くなかったと慰めたい。
2025年4月26日土曜日
yukicoder contest 465
Eまで。
No.3129 Multiple of Twin Subarray
自力AC。コンテスト後に自力で解けたけど、大分時間がかかった。
左右から、累積和の差分が最大・最小になるような値を見つけられれば良い。これは、左右から累積和を取り、さらに今の累積和の値とそれまでの累積和のminの差分を取り、そのmaxを取っていき……のようにやればできる。
最初、切れ目を全探索を考えて上手くいかず悩んでしまった。
2025年4月25日金曜日
CPCTF2025
81位でした。
「CTF」初体験だったので、CTF中心にやったつもり。LV1は一応全部解いたけど、LV2から苦戦する問題が多くて大変でした。
競技プログラミングがパズルっぽいとすれば、CTFは謎解きっぽい印象。
面白いとは思うけど、自分は謎解きよりはパズルの方が好きかつ得意だと思うので、もしCTFを解くために必要な基本技術を習得したとしてもそんなに上手くはなれないだろうな、と感じました。
まあ、もう少し勉強してみないとなんとも言えないだろうけど。
コンテスト後のツイート
個別の問題について。
— titia (@titia_til) April 20, 2025
Math Test:私はpyautoguiを使ってコピペ→計算機で計算→コピペを自動化しました!
Bench:最初「こぼちゃん」で検索していた。植田まさしといしいひさいちの絵の違いも分からなくなってしまったのか……と悲しみました。
以下は、yukicoderの問題について書きます。
No.3117 Reversible Tile
解説AC。これが解けないのはダメ。
こういう区間をひっくり返すやつは、0と1の切れ目が二個変わる、と考えるのが定石。制約を見ると、二乗DPということが分かるので……というところで詰まってしまった。
ここまでの考察は合っているのに、なぜ解法にたどりつけないのか。
今回は、「切れ目の値が入れ替わっている個数」を持ってDPすれば良い。なぜかそう思いつけなかった。
No.3119 A Little Cheat
解説AC。
swapによって増大する分と、通常の値を分けるというのは考えたけど、swapによる増大分が高々1と気付かなかったし、それをDPで求められるというのも分からなかった。
また、解説を理解した後も、DPの遷移(場合分け)が大変過ぎて実装が大変過ぎるのでは、と感じた。実際に場合分けしてみると遷移に共通する部分が多い(コピペで良い部分が多い)ためそこまで大変ではなかったが、とはいえ、こういうのをさくっと実装するにはどうすれば良いのかなぁ。
No.3120 Lower Nim
自力AC。
最初にx=1を選択するとすると、Aの総和が奇数だと先手必勝。
なら、最初にx=2を選択するとすると、A[i]/2の総和が奇数だと先手必勝。
なら、最初にx=4を選択するとすると、A[i]/4の総和が奇数だと先手必勝……というようになることを利用した。
No.3121 Prime Dance
自力AC。
メモリ制限が大変だけど、難しいという気はあまりしなかった。
……と思ったら、メモリ制限が大変だったのは、左に操作した回数、下に操作した回数を持ったせいか。
自分は、DP[left, down, x ,y]で、左にleft回、下にdown回操作して(x, y)に辿り着いたか? をboolで持ってやったけど、もう少しメモリを減らせたんですね。
AtCoder Beginner Contest 400
Eまで。
コンテスト後のツイート
AtCoder Beginner Contest 400 Eまでは速かったがFが解けない。
— titia (@titia_til) April 5, 2025
C bは奇数として良い。
D 01BFS
E 平方数で、素因数が二つのもの
F どう見ても区間DPだが遷移が書けない。
F - Happy Birthday! 3
解説AC。解説放送やこたつがめさんの放送の振り返りも参考にした。
区間DPなのは良いが遷移が難しい。四乗にする時点でかなり難しくないか?
こたつがめさんにやると、計算量削減部分は「区間DPの遷移でDPする必要があるとき」という典型らしい。l降順、r昇順にDPを計算していく。
しかし、そのパートにたどりつくためには遷移を把握できていなくてはいけないのが厳しい。ただ、こういう典型があると知っていれば、どういう遷移かを掴める確率は上がるはず(と信じたい)。
登録:
投稿 (Atom)