Sicily 1252 Defining Moment

小心有坑,看官莫跳!

我用的方法简单粗暴,分别建立前缀和后缀的map,用#代表word

然后找出前缀扩展表达式s1,和后缀扩展表达式s2

接着决定两个表达式输出顺序,注意不要加主观色彩,即使看起来这样不合理。。。o(╯□╰)o

ans 初始为 “”,接着ans的扩展顺序是: s1的 # 前的部分,s2的 # 前的部分,原始的word,s2 的 # 后的部分,s1的 # 号后的部分

输出ans


#include <iostream>
#include <string>
#include <map>
 using namespace std;
 
//判断 str 是否以 pref 开始
 bool startwith(string str, string pref)
 {
	 if(pref.size() > str.size())
		 return false;
	 for(int i=0;i<pref.size();++i)
	 {
		 if(str[i] != pref[i])
			 return false;
	 }
	 return true;
 }

//判断 str 是否以 suf 结尾
 bool endwith(string str,string suf)
 {
	 if(suf.size() > str.size())
		 return false;
	 for(int i=suf.size()-1,j = str.size()-1;i >= 0;--i,--j)
	 {
		 if(str[j] != suf[i])
			 return false;
	 }
	 return true;
 }

 int main()
 {
	 map<string,string>pref,suf;
	 pref.insert(make_pair("anti","against #"));
	 pref.insert(make_pair("post","after #"));
	 pref.insert(make_pair("pre","before #"));
	 pref.insert(make_pair("re","# again"));
	 pref.insert(make_pair("un","not #"));
	 suf.insert(make_pair("er","one who #s"));
	 suf.insert(make_pair("ing","to actively #"));
	 suf.insert(make_pair("ize","change into #"));
	 suf.insert(make_pair("s","multiple instances of #"));
	 suf.insert(make_pair("tion","the process of #ing"));
	 int n;
	 cin>>n;
	 while(n--)
	 {
		 string str,ans,s1 = "",s2 = "";
		 cin>>str;
		 map<string,string>::iterator it = pref.begin();
		 for(it;it != pref.end();it++)
		 {
			 if(startwith(str,it->first))
			 {
				 s1 = it->second;
				 int n1 = it->first.size();
				 str = str.substr(n1);
				 break; //我能不能说我开始没有 break 然后WA的好多次...o(╯□╰)o
			 }
		 }
		 for(it = suf.begin();it != suf.end();it++)
		 {
			 if(endwith(str,it->first))
			 {
				 s2 = it->second;
				 int n1 = str.size() - it->first.size();
				 str = str.substr(0,n1);
				 break;
			 }
		 }
		 int n1 = s1.find('#');
		 int n2 = s2.find('#');
		 ans = "";
		 for(int i = 0;i<n1;++i)
			 ans += s1[i];
		 for(int i=0;i<n2;++i)
			 ans += s2[i];
		 ans += str;
		 for(int i = n2 + 1;i<s2.size();++i)
			 ans += s2[i];
		 for(int i = n1 +1;i<s1.size();++i)
			 ans += s1[i];
		 cout<<ans<<endl;
	 }
	 return 0;
 }




你可能感兴趣的:(Sicily 1252 Defining Moment)