競プロを勉強してみた[1日目]
本日は6/20 1日目
001 Yokan Party
初見でしばらく考えたけどわからなかったので解法をみた。答えで二分探索をするものだった。そうすると答えが満たすかどうかの判定はO(N)でできる。この問題には境目がある(ある数がxより小さければ成り立ち、ある数がx以上であれば成り立たない)と感じたので二分探索をするべきだったなぁと思った。
002 Encyclopedia of Parentheses
bit全探索すればいいだろうなぁと思った。ACしたつもりで提出するとWA。テストケースの4でも間違えていると言われた。よく見てみると辞書順になっていない。冷静に考えてみるとビットは右から埋まるので逆から読み込ませたら上手くいってAC。
003 Longest Circular Road
都市N個に対してN-1本の道路が引かれており、どの都市も行き来できることから、このグラフは木構造を持つことがわかる。よって木の深さ?を求めればいいことには気づいたが、そこからどうすればいいか困った。ここで解答を見た。木の長さのことを木の直径とよび、それを求めるためには最短路計算を2回すればいいことがわかった。確かに一回最短路計算をして仕舞えばその端点は木の一番遠い葉か根のどちらかであるので納得できた。
本文には関係ないが、配列を宣言する時にint A[1 << 29]と言っていて賢いなぁと思った。
004 Cross Sum
縦と横の和を使った
005 Restricted Digits
むずかしそうだからパス(いつか解く、うん、いつか)
006 Smallest Subsequence
多分貪欲法だろうなと思いながら試すもO(SK)になっちゃう。解答を見る。前処理が必要らしい。正直読んでも「ほー、こんなやり方があるんか」としかならなくて自分で発想できる気がせん。いつまで経っても水になれなさそう。解説ACなのでいつかリベンジしたい。
007 CP Classes
Aをソートして二分探索すれば解けるかな〜と思ったらとけた。
008 AtCounter
もらうdpで解けるかなーって思ったら解けた。
009 Three Point Angle
ほしがむっつもあるからあとでやろう
010 Score Sum Queries
累積和使って解けるかなーって思ったら解けた