PKU 1782 Run Length Encoding
http://poj.org/problem?id=1782
与えられた文字列を指示に従って処理する。
2以上9以下の連続した文字は連続した文字数とその文字に変換し、10以上の連続は9の連続とその後で分ける。
また、連続して出現しない文字は連続していない部分を1で囲む。その中に1がある時は11にして出力する。
場合分けで若干混乱。
main(){ string in; while(getline(cin,in)){ for(int p=0;p<SZ(in);){ if(p+1<SZ(in) && in[p+1]==in[p]){ int i=0; while(p+i<SZ(in) && i<9 && in[p]==in[i+p])++i; --i; cout<<i+1<<in[p]; p+=i+1; }else{ int i=0; while(p+i+1<SZ(in) && in[p+i]!=in[p+i+1])++i; if(p+i+1<SZ(in))--i; cout<<1; for(int j=p;j<=p+i;j++){ cout<<in[j]; if(in[j]=='1')cout<<1; } cout<<1; p+=i+1; } } cout<<endl; } }