ABC287 参加記

6完41:05 234位

G解けたと思って40分バグらせたのかなしすぎる

A Majority

もうforのあるAにも慣れてしまった、数えるだけ

(AC 2:16)

 

B Postal Card

下3桁しか見なくてよいので、あらかじめ余分なところを落としてしまいます

そしたらただ一致判定するだけ

(AC 5:03)

 

C Path Graph?

これこわい

とりあえず、N-1=Mでないといけないのはいいですが、変な形になっていないか確かめる必要があります

もっと楽なやり方ありそうだけど素直に

・次数が1のもの2つ残りは2

・全体が連結である

をそれぞれ判定しました

(AC 13:28)

 

D Match or Not

これもABC-D典型ですね

左右から挟んでいるので、左右それぞれの値を前計算しておけばいいです

累積和とかでもよくあるやつ

(AC 20:20)

 

E Karuta

なんでE?と思ったけど、想定解がむずかしかった

一番LCPが大きくなるのは辞書順で隣り合うものになります

よって、ソートして愚直に隣だけ比較すればよくて、それぞれの文字列の比較回数が2回ですむので、全体でO(NlogN)となります

(AC 26:02)

 

F Components

これです

F - Tree Patrolling

 

そのまま貼るというわけにはいかないのですがほぼ同じで、「各頂点を選んだか?」という情報を持ちながらDPしてあげればいいと思います

制約もO(N^2)を許す制約をしている(ちょっとこわいけど)ので、ほぼほぼ二乗の木DPだろうとなります

遷移は過去問ほどややこしくなく、もし1つでも子とつなぐなら連結成分が増えない、そうでなくてその頂点を選ぶなら増えるということを実装してあげればよいです

 

それなりにわかりやすく書けたと思います(ぼくの提出)

Submission #38403941 - UNIQUE VISION Programming Contest 2023 New Year (AtCoder Beginner Contest 287)

(AC 41:05)

 

G Balance Update Query

まず変更がないとして、処理の仕方を考えます

これは割と自明で、ソートしておいて大きい順からとればよいです

なので、ソートした形をなんとかして維持できるといいな~と思います

 

aiは大きいですが、出てくる種類数はN+Q以内であるため、クエリを先読みして座圧します

こうすると、各数字における個数を管理することでソート状態を保てます

では、クエリに高速に答えていきましょう

クエリ1,2:これは各数字における個数を更新すればよいです

クエリ3:ここが本番です、愚直にやると大きい順からたどるので各クエリに最悪N+Q回かかってしまいます

 

この問題を解消しましょう

必要なことは[i:N+Q]の和がx以上となる最大のiをみつけることです

これはセグメント木での二分探索を用いるとO(log(N+Q))で解けます

よって、クエリ3にも高速に答えることができ解けました

 

本番はセグ木への加算がバグって通らず...

(AC --:--)

 

総括

G通して勝てると思ったんだけどな