标签:
先计算出每个单词的值,如果单词不合法则为-1,同时找出最大的单词。
然后输出。
/* ID: modengd1 PROG: lgame LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> #include <string> #include <cstring> #include <vector> using namespace std; int value[257]; int f[256]; bool useful[256]; bool legal[40000]; int valueofworde[40000]; int cal(string S,string S2)//次单词是否合法,不合法返回-1,合法返回这个词的值 { int counter[256]; memset(counter,0,sizeof(counter)); int ret=0; for(int i=0;i<S.size();i++) { counter[S[i]]++; if(!useful[S[i]]||counter[S[i]]>f[S[i]]) return -1; ret+=value[S[i]]; } for(int i=0;i<S2.size();i++) { counter[S2[i]]++; if(!useful[S2[i]]||counter[S2[i]]>f[S2[i]]) return -1; ret+=value[S2[i]]; } return ret; } void init() { value[‘q‘]=value[‘j‘]=value[‘x‘]=value[‘z‘]=7; value[‘w‘]=value[‘f‘]=value[‘k‘]=value[‘v‘]=6; value[‘e‘]=value[‘s‘]=value[‘i‘]=1; value[‘r‘]=value[‘t‘]=value[‘a‘]=value[‘n‘]=2; value[‘o‘]=value[‘l‘]=3; value[‘u‘]=value[‘d‘]=value[‘c‘]=4; value[‘p‘]=value[‘g‘]=value[‘b‘]=value[‘m‘]=value[‘y‘]=value[‘h‘]=5; } int main() { freopen("lgame.in","r",stdin); freopen("lgame.out","w",stdout); init(); vector<string> dict; char ch; int maxvalue=0; char temp[10]; FILE *in2 = fopen ("lgame.dict", "r"); vector<int> index[43];//单词值为i的单词在字典中的位置 memset(useful,false,sizeof(useful)); memset(f,0,sizeof(f)); while(~scanf("%c",&ch)) { useful[ch]=true; f[ch]++; } for(int i =0;~fscanf(in2,"%s",temp);i++) { if(temp[0]==‘.‘) break; dict.push_back(temp); valueofworde[i]=cal(temp,""); if(valueofworde[i]!=-1) index[valueofworde[i]].push_back(i); maxvalue=max(maxvalue,valueofworde[i]); } for(int i=1;i<=42;i++) { for(int j=0;j<index[i].size();j++) { for(int k=0;k<=42;k++) { for(int m=0;m<index[k].size();m++) { maxvalue=max(maxvalue,cal(dict[index[i][j]],dict[index[k][m]])); } } } } cout<<maxvalue<<endl; for(int i=0;i<dict.size();i++) { if(valueofworde[i]==maxvalue) cout<<dict[i]<<endl; else { int other=maxvalue-valueofworde[i]; for(int j=0;j<index[other].size();j++) { if(index[other][j]>=i&&cal(dict[index[other][j]],dict[i])==maxvalue) { cout<<dict[i]<<‘ ‘<<dict[index[other][j]]<<endl; } } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/modengdubai/p/4852740.html