2024年10月31日木曜日

Codeforces Global Round 27

 Cまで三完で過去最悪の成績で紫に落ちた。

コンテスト後のツイート

D. Yet Another Real Number Problem

 コンテスト中の最初の提出を修正してAC。最初に考えていた、dequeを使ってうまく後ろ二つをmergeしていく、という方針が正しかった。

 ただ、mergeの条件が間違っており、修正に10WAを費やしてしまった。ちゃんと立式すれば良いはずなのだが、立てた式で計算ミスをしていたりして……。

 ちゃんとやれば解けたはず、と言っても間違いではないだろうが、実際のACは非常に遠かった。
 

E. Monster

 コンテスト中に提出したもののパラメーターをちょっと変えたらAC。

 コンテスト中は、最大値が10^8なのに、10^5ごとに計算してその付近の上位三つを探索していた。平方分割を意識しているのなら10^4ごとに探索する方が自然だし、その方が適切に探索できるだろう、と変更(上位10個を探索)したらAC。

 7ペナもしているのに、この変更を思いつかなかったのはおかしい。焦って頭が働いていなかったんだろうなぁ。

2024年10月30日水曜日

Educational Codeforces Round 171 (Rated for Div. 2)

 Dまで四完。

コンテスト後のツイート

E. Best Subsequence

 「燃やす埋める問題」というキーワードを見てAC。

 コンテスト中、フローは少し考えたはずなのだが、ちゃんと追及しなかった。
 DPなどでは指数時間の解法しかないときにフローを疑うのは大事で、特に、「燃やす埋める問題」を疑ってみなくてはいけない。

 フローを考えた時間はあったはずなのに、「燃やす埋める問題」ではないかと考えなかったのは反省。





2024年10月29日火曜日

yukicoder contest 449

 Dまで四完。


No.2914 正閉路検出

 解説AC。

 コンテスト中に解けなかったのは仕方ないとしても、解説読まずにACしたい問題でした。
 重み付きUnionFindを使うというのは自然なのに、ちょっと捻った形で出題されると気付けないのは情けない。

No.2915 辺更新価値最大化

 解説AC。

 最短経路問題におけるポテンシャルは、最小費用流のライブラリを作ったときしか勉強しておらず、全く忘れていた。こういうときにも使えるのか。復習になった。

No.2916 累進コスト最小化

 自力AC。

 各cごとにダイクストラをするだけでした。

2024年10月27日日曜日

yukicoder contest 293

 A一問しか解けなかった。ひどい。


No.1492 01文字列と転倒

 一応自力AC。

 Tester解説と同じ方法だと思うんだけど、計算量がよく分からなかった。
 五乗じゃないの? と思ったけど、ちゃんと解析したら四乗になりそうな気もしてきた。

No.1493 隣接xor

 解説AC。

 隣接xorを考えるのだから、累積xorを考えてみるというのは典型なのだろうが、思いつけなかった。
 その後の部分列DPのやり方も実は知らなかった気がする。各文字についての配列を持たなくてもできるとは聞いたことがあったが、こういう風にやれば良いのか。

トヨタシステムズプログラミングコンテスト2024(AtCoder Beginner Contest 377)

 Fが解けず六完。Eが難しかった。

コンテスト後のツイート

F - Avoid Queen Attack

 クイーンを置くごとに、置けなくなるマスが何個増えるか数える……というのはコンテスト中に考えていたが、setで管理すると書きやすいという情報を得て、その方針でAC。
 いや、今思うと、重複をどう処理するかはコンテスト中ちゃんと考えられていなかったね。既におけなくなっている座標をsetで管理するという方針は、実装面だけでなく、重複を取り除くという点でも大切だった。

 ただ、その方針でも実際に実装するのは苦戦した。





2024年10月21日月曜日

yukicoder contest 450

 ABCEの四完でした。


No.2940 Sigma Sigma Div Floor Problem

 解説AC。

 コンテスト中は、各i(<=N)について大体√iの計算時間で計算できるので、それをN回やっても間に合うか? と思ったがTLE。埋め込めばACはできそうだけど実装しなかった。

 解説を読むと、シグマを交換するのが本質だった。
 割る数を固定するのではなく、割られる数を固定すると約数を考える問題になる。

 割る数を固定しても良いところまでいくこともあって思いつかなかったけど、頭の柔軟さが足りないね。

No.2942 Sigma Music Game Level Problem

 一応自力AC。

 セグ木を二本立てれば簡単にできる問題に見えたがWA。配列Lおよび三つ目のクエリの意味が分からないので、どこか誤読しているのかも……と思ってDへ戻ったが、単純な実装ミスでした。
 Aを回数順にしてからセグ木に入れなくてはいけないのにAをそのままでやっていた、セグ木の内部をちょっと書き換えたとき間違っていた、クエリ1でAに何か付け加えるときのupdateの仕方を間違えていた、と三ヶ所。

 こんな短い中で三つもミスしているのは良くないねぇ。

No.2943 Sigma String of String Score Problem

 自力AC。

 DPして部分列の個数を求めて、他の箇所を使うか使わないか決めれば良い。計算量10^8がPyPyで間に合うのか分からないまま提出しましたが、1sもかかりませんでした。

No.2944 Sigma Partition Problem

 しばらく考えた後、これって分割数ってやつでは? と気付き、検索し、ここを参考にしてAC。

 分割数のDPを自力で導出するのは難しいけれど、有名な概念だということはすぐ気付きたい。

2024年10月20日日曜日

AtCoder Beginner Contest 376(Promotion of AtCoder Career Design DAY)

 Eまで五完。

コンテスト後のツイート

↑ツイートのFの位置が間違っています。

F - Hands on Ring (Hard)

 既にあるACコードとランダムテストなどしてAC。

 本質的なやり方は正しかったが、場合分けが足りていなかった(目的地の場所に別の手がある場合、二通り押し出すことを考えなくてはいけないのを忘れていた)り、既に目的地に手がある場合にも押し出すことを考えて答えが減ったりし、非常に苦労した。

 コンテスト後に一時間以上かかっている。本来ならランダムテストを書く時間も必要だったからもっとかかっただろう。解法は分かってもACは遠い問題ですね。

G - Treasure Hunting

 解説放送を見てAC。

 解法を思い付くのは難しいかもしれないけど、解法を教えてもらったとき理解するのは難しくない。
 ただ、実装方針はやや難しい。トポロジカルソート順にマージするのか? などと考えてしまいダメだった。
 平均重みが大きいものから、親と比較し、マージしていくというのが正解。方針が分かってしまえば実装も重くない。

 類題(元ネタ?)というこれも解いておきたい。→ACしたけど結構実装に時間かかってしまった。maspyさんが類題をまとめてくれているので、これも解いておくべきか。