Mitsubachiのメモ

組合せ論をしています

Div1 バチャ日記2 - Codeforces Round #556

#556 を走った。Bが重たかったなあ。

codeforces.com

f:id:Mitsubachi88:20211220163906p:plain

AB2完。Cは解説AC。

 

A - Prefix Sum Primes

4 以上の偶数は見なくていいから途中は 2 をいっぱい並べたいという発想になって 1 の個数で最初と最後に持ってくる数を場合分けしようとか思ったけど、途中で 2,1 を最初に置いて後は 2 を全部やって、 1 を全部やるみたいなのが実装楽だと気付けた。

 

B - Three Religions

制約の You can assume that no religion will have description longer than 250 characters. が露骨にヒントっぽいので 3 乗のDPを考えると dp_{i,j,k} で作りたい文字列の前からそれぞれ i,j,k 文字目までを取るのにindexは最適でどれだけいるかみたいなのが思いついた。

遷移を書くのが少し面倒だった。

 

C - Tree Generator™

これ面白かった。木の u,v 間の距離って  d(u)+d(v)-2 d( lca(u,v)) なのはそうで、 d(u),d(v) は括弧列の部分和  μ で簡単に求められるのだが、 d(lca(u,v)) u,v 間に対応する括弧列の区間で最小となるものに一致するというのが思いつかなかった。

これが分かればセグ木に今の深さ、 a \leq b \leq c として  \max ( μ(a)), \,min ( μ(b)), \max (μ(a)-2μ(b)),\max (-2μ(b)+μ(c)) そして \max(μ(a)-2μ(b)+μ(c)) を乗せればいい。 op を書くのが面倒だった。