Official
A - atcoder < S Editorial by maroonrk
まず,\(S\)>atcoder
が初期状態で満たされていれば,\(0\) が答えです.
また,\(S\) が a
のみからなる文字列なら,\(-1\) が答えです.
それ以外の場合を考えます.\(S\) を先頭から見て,a
以外の文字が始めて出現する位置が \(k\) 文字目であるとします.
まず,答えは \(k-1\) もしくは \(k-2\) です.
もし \(k-3\) 以下だとすると,\(S\) の先頭 \(2\) 文字は aa
になってしまうので,\(S<\)atcoder
です.
逆に,\(k-1\) 回操作すれば,\(S\) の先頭まで \(S_k\) を移動させてくることができ,\(S>\)atcoder
となります.
\(k-2\) 回の操作で \(S>\)atcoder になるとすれば,それは \(S_k\) を\(S\) の \(2\) 番目の位置まで移動させた場合のみです.
なので,それで実際に \(S>\)atcoder
となるか判定すれば,答えが \(k-1\) か \(k-2\) かわかります.
なお,よく考えると,\(S_k\leq\)t
なら \(k-1\) 回,そうでないなら \(k-2\) 回であることもわかります.
計算量は \(O(|S|)\) です.
posted:
last update: