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: