ABC171 - F を余事象からアプローチする
本番で「簡単じゃーん」とか言ってたら、解説と違う解法だったので
言いかえ・余事象
操作を逆から見ると、「長さで、部分列にを持つ文字列」の個数を求めればいいことがわかります。(Editorialではこれを直接求めていますが、僕にはこれを直接求めるのが困難に感じたので、余事象を考えました。)
余事象を考えると、「長さで、部分列にを持たない文字列」の個数がわかればいいです。
余事象を解く
を、「の部分列かつの接頭辞である最長の文字列の長さ」とします。
なので、各についてで求められれば良いです。
を、「かつとなる最小の」とします。
の選び方は通りあります。
のとして採用されないindex の、文字の選び方を考えます。となる最小のを考えたとき、はとして使えません。
逆にそれ以外の文字は使えるので、通りの文字を選べます。
よって、各についてを足し合わせればいいです。
コード:Submission #14557607 - AtCoder Beginner Contest 171
おわり
なんか説明が苦手なので駄文になってしまった気がしています。
考察はどっちが楽かわかりませんが、僕には余事象の方が簡単に感じます。あと、実装は明らかにこっちのほうが楽です(どっちでも楽だろ)。