SRM 628 Div2 Codeforces #264 Div2

SRM 628

Easy

ビジョップを使って、最低何手で(r1, c1)から(r2, c2)にたどり着けるか?たどり着けない場合は-1を出力。

BFSで解いた。ビジョップの移動をシュミレートするだけ。

Med

'(',')','[',']','{','}','X'からなる文字列が与えられる。Xはどの文字にもなれる。

exp := ""
exp := "(exp)" | "[exp]" | "{exp}"

expが成り立つなら。"possible"。無理なら"impossible"とする。

全探索で解いた。stackで構文が成り立つか

Hard

ごめん。わからない。集合とかの話。

Codeforces #264 Div2

C

ビジョップを2つ置く。もっとも点数が高くなる場所はどこか。

解けない。斜めの累積和を取る。(y+x)%2が同じならカブる部分ができるので必要ない。単純に合計するだけでいい。それぞれの最大値を求める。O(N2)。

D

K個の整数列のLCS(最長共通部分列)を求める。普通にDPしようと思ったら、O(NK)でした。絶対無理。

数列をひとつずつ見ていくと、この数字はこの数字の後ろには来てはいけないというのがわかる。すべての数列に対して、どの数字がどの数字の後ろに来ちゃいけないかわかったら。1からNまでの数字に対して、この数字を先頭にした時のLCSを求めてく。各数字に対してO(N)なので全部でO(N2)で済む。前処理を含めてO(K*N+N2)でいいんでしょうか

E

N個の頂点からなる根付き木と各頂点の値がある。Q個のクエリを処理する。

わかりません。解説読んでもわからない

まとめ

SRMは2問、CFはABはすでに通したあったので飛ばして、CDを一回解説読んで写経して、自分で実装しなおした。とりあえずは理解できたと思う。HardとEは意味がわからない

精進が足りない