本文共 1727 字,大约阅读时间需要 5 分钟。
这题比较简单,用点STL写起来很方便,搞清楚题意就好,最好是先对dict读出来处理下,符合规则的存到map里,map<string,int>不懂看下NOCOW。
wa了2次,发现是忘了处理只判断一个字符串的情况
/*ID: hubiao cavePROG: lgameLANG: C++*/#include #include #include #include #include #include using namespace std;#define VALUE(x) (value[x-'a'])map ms;list >lp;const int value[26]={ 2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};int evalue[26];bool Match(string*);int GetValue(string*);int Fit(string*,string*);bool Equal(string*);int main(){ ifstream fin("lgame.in"); ifstream fdic("lgame.dict"); ofstream fout("lgame.out"); string str; fin>>str; for(int i=0;i >str;str!=".";fdic>>str) if(Match(&str)) ms[str]=GetValue(&str); int maxv=0; for(map ::iterator it=ms.begin();it!=ms.end();++it) { string str=it->first; if(Equal(&str)) { int t=GetValue(&str); if(maxv ::iterator it2=it;it2!=ms.end();++it2) { string str1=it->first,str2=it2->first; if(Fit(&str1,&str2)) { string str3=str1+str2; int t=GetValue(&str3); if(maxv >::iterator it=lp.begin();it!=lp.end();it++) { fout< first<<(it->second.empty()?(""):(" "+(it->second)))< length();i++) sum+=VALUE((*pstr)[i]); return sum;}int Fit(string* str1,string* str2){ int ary[26]; memcpy(ary,evalue,sizeof(evalue)); for(int i=0;i length();i++) { if(ary[(*str1)[i]-'a']==0) return false; else ary[(*str1)[i]-'a']--; } for(int i=0;i length();i++) { if(ary[(*str2)[i]-'a']==0) return false; else ary[(*str2)[i]-'a']--; } return true;}bool Equal(string*str){ int ary[26]; memcpy(ary,evalue,sizeof(evalue)); for(int i=0;i length();i++) ary[(*str)[i]-'a']--; for(int i=0;i<26;i++) if(ary[i]!=0) return false; return true;}
转载于:https://www.cnblogs.com/cavehubiao/p/3514845.html