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;
}