Processing math: 0%

2025年5月7日水曜日

AtCoder Beginner Contest 404(Promotion for Engineer Guild)

 Eまで五完。

コンテスト後のツイート

F - Lost and Pound

 解説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は再帰じゃないと書けないかもしれない。

 

G - Specified Range Sums

 解説放送を見て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まで六完。

コンテスト後のツイート

G - Odd Position Sum Query

 解説放送を見てAC。

 この前のこたつがめさんの解説放送で、セグメント木≒Binary Trieだという話を聞いていた。知識はあったので解けなくてはいけない問題だった。

 ただ、そもそも、値が小さければ普通のセグメント木で解ける、ってこと自体思いついてなかったんだよね……。



BrainPad プログラミングコンテスト 2025 (AtCoder Heuristic Contest 046)

 384位。終了間際の提出がTLEになってしまい悲しい。

コンテスト後のツイート

 コンテスト中考えていた提出でバグがなかったら81位相当だった。

 惜しかったようで惜しくなかったのでは、考えていた方針はそれほど悪くなかったと慰めたい。






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を解くために必要な基本技術を習得したとしてもそんなに上手くはなれないだろうな、と感じました。
 まあ、もう少し勉強してみないとなんとも言えないだろうけど。

コンテスト後のツイート

 以下は、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まで。

コンテスト後のツイート

F - Happy Birthday! 3

 解説AC。解説放送やこたつがめさんの放送の振り返りも参考にした。

 区間DPなのは良いが遷移が難しい。四乗にする時点でかなり難しくないか?

 こたつがめさんにやると、計算量削減部分は「区間DPの遷移でDPする必要があるとき」という典型らしい。l降順、r昇順にDPを計算していく。

 しかし、そのパートにたどりつくためには遷移を把握できていなくてはいけないのが厳しい。ただ、こういう典型があると知っていれば、どういう遷移かを掴める確率は上がるはず(と信じたい)。