2022年8月1日月曜日

第三回日本最強プログラマー学生選手権-予選-(AtCoder Beginner Contest 262)

 Eまで五完。

コンテスト後のツイート

F - Erase and Rotate

 解説AC。

 ある数字を先頭に持ってくるためには、

・それより前を全て消す
・それより後の数字を全て消すもしくは先頭へ移動させた後、その数字も先頭へ持っていく

 のいずれかの方法がとれる。
 コンテスト中は二番目の方法しか考えていなかったためダメでした。

 一旦先頭へ持っていった後は、範囲最小値が分かるセグ木を使って、あるindex iからi+Kの間にP[i]より小さい数字があればindex iを消去、というのを繰り返せば良い。(先頭への移動がない場合も、この方法で作ればOK)
 ただし、Kが余っていたら、最後にPの後ろを消すのを忘れずに。

G - LIS with Stack

 解説放送を見てAC。

 解法を理解するのも実装するのも難しい。
 indexがどこに移るか考えて、「区間で何かする」という発想に思い至れば思いつけるのかなぁ。

Ex - Max Limited Sequence

 解説放送を見てAC。

 解法(の高速化以外の部分)を理解するのはそれほど難しくないけど、普通にやろうとするとDPが二乗になってしまう。確かに高速化できそうではあるのだが、実装方針が難しいし、方針を理解しても実際の実装には非常に苦労した。

 解説の方法で実装したけど、遅延セグ木を使った方が実装しやすいのかなぁ。どっちみち大変そう。

0 件のコメント:

コメントを投稿