PKU 1589 Unix ls

http://poj.org/problem?id=1589
入力された文字列を出来るだけ少ない行で、アルファベット順に並んだように出力するというような問題。

面倒くさいかと思っていましたが、案外そうでもないように感じました。
配列の範囲チェックを==で行なって1RE頂きました。

main(){
  int n;
  while(cin>>n){
    vector<string> app(n);
    int sz=0;
    rep(i,n){
      cin>>app[i];
      sz=max(sz,SZ(app[i]));
    }
    sort(ALL(app));

    cout<<string(60,'-')<<endl;
    
    for(int c=60;;--c){
      if(sz+(sz+2)*(c-1)<=60){
        int r=(SZ(app)+c-1)/c;
        rep(i,r){
          rep(j,c){
            if(j*r+i>=SZ(app))break;
            if(j)cout<<"  ";
            cout<<app[j*r+i]<<string(sz-SZ(app[j*r+i]),' ');
          }
          cout<<endl;
        }
        break;
      }
    }
  }
}