SRM715 div2
先日のSRMに出ました
SRMに出るのは初めてでいろいろ戸惑った・・
easy
4重ループをかくとACする
medium
+-+とか-+-とかいうのは明らかに無駄でやらないほうがマシなのでありえるのは
--..+++か++..----のみだけどこれは片方だけやっても最大-最小は変わってないので
どちらかのみを実行するとしてよいから
結局+と-の個数を数えて大きいほうが答え
hard
a1[0]は必ず木の根になる(これをrとおく)
a2の要素のうち、rがあるindexより左の要素は、根の左の部分木
同様にrがあるindexより右の要素は根の右の部分木
これにより根の左と右の部分木のサイズが分かるので、a1,a3を分割できる
この時点で整合性がとれていない場合はImpossible(setにぶちこんで==とかでかくにんすればいいかな)
あとは再帰関数で左と右の部分木に対してチェックしていく
このとき{s[0],s[2],s[4]},{s[1],s[3],s[5]}は{"pre","in","post"}に等しいという謎に見える制約が効いてきて、6つのvectorを頑張って並び替えて同じ関数を呼ぶだけでよくなる
後は左の部分木と右の部分木が両方PossibleだったらPossible,そうでなければImpossibleを返すようにすればよい
ただし、空のvectorが渡されてきた場合はPossibleを返すようにしないと根を確保しようとする時点でout of rangeで落ちる
div2で2位になってレートが1765になった(レーティングシステムなんとかして)
次はdiv1でぼっこぼこにされてきます