ZOJ 3481 Expand Tab
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4278
昨日コンテストの復習。なんですが、ネット上に転がっていた解説っぽいもの(中国語)を読んで、誤解していたところをやっと理解しました。
http://blog.sina.com.cn/s/blog_5123df350100r4si.html
サンプルのタブの長さ設定を見たときに少しでも疑問を持つべきでした。読解力なさす。
やっぱりBを選んだほうが良かった気がします
main(){ int t; cin>>t; while(t--){ string in; while(getline(cin,in))if(in.substr(0,6)=="expand")break; vector<int> ts; map<int,int> sts; string end; stringstream ss(in); ss>>end; int tt; while(ss>>tt){ ss.ignore(); sts[tt]++; } FOR(siter,sts){ ts.pb(siter->F); } if(sts.size()==1 && sts.begin()->S>1)ts.pb(sts.begin()->F+1); end=in.substr(in.find("<<")+2); while(getline(cin,in)){ if(in==end)break; int num=0; int tnum=0; rep(i,in.size()){ if(in[i]=='\t'){ int mnum=0; while(num>=mnum){ if(tnum<ts.size())mnum=ts[tnum]; else if(ts.size()==1)mnum=ts[0]*(tnum+1); else mnum=ts.back()+tnum-ts.size()+1; if(num>=mnum)++tnum; } while(num++<mnum)cout<<' '; --num; ++tnum; }else{ cout<<in[i]; ++num; } } cout<<endl; } cout<<endl; } }