ラベル HL分解 の投稿を表示しています。 すべての投稿を表示
ラベル HL分解 の投稿を表示しています。 すべての投稿を表示

2026年4月19日日曜日

キーサイト・テクノロジープログラミングコンテスト(AtCoder Beginner Contest 454)

 Eまで五完。

コンテスト後のツイート

F - Make it Palindrome 2

 解説放送を見てAC。

 結局のところ、「区間加算がきたら差分を取って考える」ができていなかった。この典型にはいつもやられている気がする。

 今回は忘れていたわけではなくて、コンテスト中、差分を取って考えてみようとはしたのだが上手くいかないと思ってやめてしまっている。
 しかし、区間の話を二点の足し引きにできているという時点で前進しているのだから、捨てたりせずちゃんと思考を進めるべきだった。

 あまり意味のない言い換えに思えたとしても、やっておかなくてはいけない。

G - Mode in the Subtree

 解説、解説放送など色々参考にしてAC。

 その過程で、HL分解について、HL分解した後にセグ木などに乗せる場合の並べ方を勘違いしていたことに気付き、自分がHL分解を初めて知ったこの問題をようやくACした。
 HL分解した後、色々したいなら、オイラーツアー順に並べるのが鉄則! そうすることで、子孫たちが区間に並ぶので、上手く処理することができる。

 このこと自体は知っていたけど、当時は知らなかったのかな? HL分解とこの処理を組み合わせられるというのは初めて知りました。

 さて、この問題ではDSU on Treeを初履修した。

 アルゴリズム自体は分かりやすいけど、正当性の胆は、「全ての頂点における「light edgeたちに関する子孫の個数」の総和はO(NlogN)になる」ということだと思う。公式解説でもそう書いてあるのだけど、理解できず生成AIに相談してようやく理解できた。

 その上で、定数倍が厳しく、PyPyじゃ通せずcodonで通したのだけど、PyPyで通している人もいますね。もっと上手くやる方法があるのかな。

2023年4月6日木曜日

AtCoder Beginner Contest 294

 Eまで五完。


F - Sugar Water 2

 解説AC。

 二分探索後の判定方法が分からず悩んでいたが、食塩水と同じで良かった。この問題をすぐ思い出したのに、判定方法が出てこなかっただけでなく、解説を見に行かなかったのは酷い。

G - Distance Queries on a Tree

 HLDとかオイラーツアーを使うのだろうと考えていたが、どちらでも解けたらしい。キーワードを思い付いているのに解けないのは良くない。

 随分昔に書いたHL分解のコードをもってきてAC。
 そのとき書いていたコードが頂点準拠なものなので、辺準拠に改造するのに戸惑った。

 自分のHL分解のライブラリが遅いのは分かっているので、それもどうにかしないとねぇ。