Bでしょうもない見落とししたのが痛い。
http://codeforces.com/contest/708/problem/A
問題
アルファベット小文字からなる文字列Sが与えられる。
S中の空でない連続部分列1か所に対し、文字を1つ手前に巡回させる。
こうしてできる辞書順最小の文字列は何か。
解法
Sが全て'a'なら、末尾を'z'にしよう。
そうでないなら、一番先頭にある'a'以外で構成される最長部分文字列を巡回させよう。
string S; int L; void solve() { int i,j,k,l,r,x,y; string s; cin>>S; L=S.size(); FOR(i,L) if(S[i]!='a') { for(j=i;j<L;j++) { if(S[j]=='a') break; S[j]--; } break; } if(i==L) S[L-1]='z'; cout<<S<<endl; }
まとめ
まぁここはまだ。