PKU 2803 Defining Moment

http://poj.org/problem?id=2803

入力された単語のprefix,suffixを変換するだけの問題。

なんとか楽しそうな感じがしたけれど、打ち込んでいる内にめんどくさく感じてきた問題。
もう少しスマートに書いてもよかったような気がしました。

main(){
  int n;
  cin>>n;
  while(n--){
    string bef,aft,in;
    cin>>in;
    int sz=SZ(in);
    if(sz>3 && in.substr(0,4)=="anti"){
      in=in.substr(4);
      bef+="against ";
    }else if(sz>3 && in.substr(0,4)=="post"){
      in=in.substr(4);
      bef+="after ";
    }else if(sz>2 && in.substr(0,3)=="pre"){
      in=in.substr(3);
      bef+="before ";
    }else if(sz>1 && in.substr(0,2)=="re"){
      aft+=" again";
      in=in.substr(2);
    }else if(sz>1 && in.substr(0,2)=="un"){
      bef+="not ";
      in=in.substr(2);
    }

    sz=SZ(in);
    if(sz-2>=0 && in.substr(sz-2)=="er"){
      in=in.substr(0,sz-2)+"s";
      bef+="one who ";
    }else if(sz-3>=0 && in.substr(sz-3)=="ing"){
      in=in.substr(0,sz-3);
      bef+="to actively ";
    }else if(sz-3>=0 && in.substr(sz-3)=="ize"){
      in=in.substr(0,sz-3);
      bef+="change into ";
    }else if(sz-1>=0 && in.substr(sz-1)=="s"){
      in=in.substr(0,sz-1);
      bef+="multiple instances of ";
    }else if(sz-4>=0 && in.substr(sz-4)=="tion"){
      in=in.substr(0,sz-4)+"ing";
      bef+="the process of ";
    }
    cout<<bef<<in<<aft<<endl;
  }
}