ABC285

5完。キツいセット。

A - Edge Checker 2

セグ木とかで見るやつ。画像の数が意地悪に入れ替わったりはしてないと、びっくりするくらい信じてる。aから見ると相手は2通り考えられるが、bから見れば1通り、2で割って切り捨てる。

B - Longest Uncommon Prefix

問題文が読めない。何を言ってるんだか全くわからない。しばらくして問題名を見てみたが、やはりわからない。変数名もかなりわかりにくい割り当てになっている。仕方ないので書かれている通りに実装する。0-indexedに直すのもかなりやりにくい。iは幅なので変えないがkは位置なのでデクリメントする。k=0が条件を満たさないなら答えは0、そうでないときkの最大値より1大きい数が答え。すごく不自然で面白みのないものをやらされている感じ。考える余地がない。コード自体は短いけど飛ばしてもよかったかもなあ。

C - abc285_brutmhyhiizp

Sより小さいものが何個あるかわかればよい。文字数が違うものは26の冪乗を足していく。文字数が同じものは下の桁から寄与を足していく(やはり26冪を計算しながら)(途中で上からできたかと思ったけど半分以上書いちゃったのでそのまま)。

D - Change Usernames

最初、Sに現れない名前がTに一つでもあればいいかと思ったけど、普通に反例がある。なるほどループがあったらダメなのね。unordered_mapにSだけ入れる。有向グラフ。頂点iからは、T_iがS_jと同じなら頂点jへ辺を張る。ループ検出にけっこう手間取った。始点がどこだかわからない中で同じ辺をO(1)回しか調べないようにするのが大変。訪問済みフラグで世代管理するやつ。前回までに訪問した頂点に来たならOK。

(追記)言われてみればUnionFindでできそう。どんなグラフができるか思い浮かべると、ひげのみまたはループにひげが付いたやつで、辺をUnionFindでつないで元々同じ連結成分だったということがあればループだしなければループはない。なんか証明がしにくいので選びづらいな。

E - Work or Rest

曜日の名前に意味はない。曜日1は休日だとしてよい。DPっぽいと思って考えていくと、休日ではさまれた区間同士は独立に考えられると気づく。平日がi日だけ続いたときの生産量を前計算しておく(高速化もできそうだけど愚直に2乗でいい)。そしたら、曜日1は休日として最後の休日が曜日iだったときの曜日1から曜日iまでの生産量でDP。A_0はなくてA_1から始まってることに気づかずサンプル合わなかった。

F - Substring of Sorted String

なかなか趣旨がわからないけど頑張って読んでいく。個数をカウントしておけばTがどんな文字列かはわかる。これで解けるかと思い実装を始めた。しかし、例えばSがabcxxxxからabcxxbxに変化したとき、Tの部分文字列にabcが現れなくなってしまう。クエリ2では長い区間が与えられることもあるのでいちいちチェックできない。これは解けないと思い10分くらいでGへ。以降ずっとGをやっていた。

(追記)あー与えられた区間はソートされてる必要があるのか。それは隣同士の関係(N-1個ある)がソートされてるかBITで管理すればわかる。また、ソートされているなら情報量は各文字の個数だけしか持ってない。個数を全体と比較して一致している区間があってその両隣が0と全体の間でその外は全部0という条件になる(解説見て気づいたけど全体の文字数を超えることは当然ないので余計な処理をしていた)。BITを26個持つのは嫌なので26個の情報を持つBITを1個持ったけど実装はけっこう大変だった。これはコンテスト中に通すのが困難なタイプの実装だ。

G - Tatami

'?'がなければフローを流すだけ。マス(i, j)に対しi+jの偶奇で分ける(1*2の畳は必ず偶奇が異なる2マスに渡る)。どうにか工夫できないかずっと考えていたが、全てをカバーすべき2のマスの個数が偶数側と奇数側で違うし'?'の個数も違うし'?'は使い切らなくていいしで難航した。しばらくして、どうでもいい'?'を追加して個数を揃えることを思いつく。'?'から'?'へは辺を張らないと思っていたが、逆に余ったものを自由につなげるようにして全部カウントしてしまう。1のマスも'?'としかつながれない'?'として扱う。H*Wが奇数のときは数合わせに1個追加する。これで、SからもTへも(H*W+1)/2を切り捨てたぶんだけ流してる。1を含まず2を含むところに辺を張る。'?'同士は特別に用意した頂点を経由して全部つなぐ。全部流せればYes。残り15分では実装できず10分オーバーでAC。実装のための残り時間を残して考察を打ち切ったし、嘘解法が通ったという話も聞くし、解説も難しいので、自分の解法が正しいかわからない。