2803 Defining Moment
問題概要
接頭辞と接尾辞から、単語の意味を作る表が与えられる。
接頭辞と接尾辞のついた単語を、意味の文に変換せよ。
解法
ある接頭辞/接尾辞があったときに、単語の前および後ろに付加する語句のテーブルを持っておく。
接頭辞/接尾辞が見つかったら、それを取り除いて、出力時にテーブルを付加する。
スペルミスに注意……
ソースコード
string pre[]={"anti","post","pre","re","un"}, suf[]={"er","ing","ize","s","tion"}; string pp[]={"against ","after ","before ","","not "}, ps[]={"","",""," again",""}, sp[]={"one who ","to actively ","change into ","multiple instances of ","the process of "}, ss[]={"s","","","","ing"}; int main() { int n; string in,ans; cin>>n; rep(i,n) { cin>>in; int p=0,s=0; for(;s<5;s++)if(in.size()>suf[s].size()&&in.substr(in.size()-suf[s].size())==suf[s])break; if(s<5)in=in.substr(0,in.size()-suf[s].size()); for(;p<5;p++)if(in.size()>pre[p].size()&&in.substr(0,pre[p].size())==pre[p])break; if(p<5)in=in.substr(pre[p].size()); if(s<5)in=sp[s]+in+ss[s]; if(p<5)in=pp[p]+in+ps[p]; cout<<in<<endl; } return 0; }