PKU 1598 Excuses, Excuses!
http://poj.org/problem?id=1598
K個のキーワードとE個の文が与えられる。E個の文の中でキーワードの出現数が最も多いものを出力しろというような問題。出現するキーワードはアルファベット以外の文字で区切られていなければならない。
string.find()の使い方に少し手間取りました。
あと、キーワードの抽出がしやすいように適当なところにスペースを入れて上手いことやろうとしました。
string in[20]; string conv[20]; string key[20]; int occ[20]; main(){ int k,e,cc=0; while(cin>>k>>e){ ++cc; rep(i,k){ cin>>key[i]; key[i]=' '+key[i]+' '; } cin.ignore(); int maxoc=0; rep(i,e){ getline(cin,in[i]); conv[i]=""; rep(j,in[i].size()){ if(isalpha(in[i][j]))conv[i]+=tolower(in[i][j]); else conv[i]+=' '; } conv[i]=' '+conv[i]; conv[i]+=' '; occ[i]=0; rep(j,k){ int pos=-1; while((pos=conv[i].find(key[j],pos+1))!=string::npos)++occ[i]; } maxoc=max(occ[i],maxoc); } cout<<"Excuse Set #"<<cc<<endl; rep(i,e){ if(occ[i]==maxoc)cout<<in[i]<<endl; } cout<<endl; } }