#include<iostream>
#include<string.h>
#include<set>
#include<algorithm>
#include<string>
/*
* AUTHOR: benbendog
* DATE : 2011/2/2
* PROBLEM: a typist is injured, some words cannot be typed
* given many words, find the longest words that he
can type.
* SOLUTION: ad-hoc.
* CAUTION: don't assume the first words follows the numbers
* for example
2 1
1 2 (some trailing space)
words
*/
using namespace std;
void update(int t,short* s);
int main()
{
int i,j,n,w,t,len;
char ch;
while(cin>>n>>w)
{
set<string> se;
set<string>::iterator iter;
short charset[256];
char l[100];
for(i = 0 ;i < 256 ; ++i)charset[i ] =1;
charset[' '] = 2;
for(i = 0 ;i < n ; i++)
{
cin>>t;
update(t,charset);
}
while((ch = cin.get())!='\n');
for(i = 0 ;i < w ; i++)
{
cin.getline(l,100);
len = strlen(l);
for(j = 0 ; j < len ; j++)
{
if(charset[l[j]]==0)
break;
}
if(j==len)
{
if(se.size()==0)
se.insert(string(l));
else
{
iter = se.begin();
if(len > iter->length())
{
se.clear();
se.insert(string(l));
}
else if(len == iter->length())
se.insert(string(l));
}
}
}
cout<<se.size()<<endl;
for(iter = se.begin() ;iter!=se.end() ; iter++)
cout<<*iter<<endl;
}
return 0;
}
void update(int t,short* s)
{
switch(t)
{
case 1:
s['q'] = s['a'] = s['z'] = 0;
break;
case 2:
s['w'] = s['x'] = s['s'] = 0;
break;
case 3:
s['e'] = s['d'] = s['c'] = 0;
break;
case 4:
s['r'] = s['f'] = s['v'] = s['t'] = s['g'] = s['b'] = 0;
break;
case 5:
s[' ']--;
break;
case 6:
s[' ']--;
break;
case 7:
s['y'] = s['h'] = s['n'] = s['u'] = s['j'] = s['m'] = 0;
break;
case 8:
s['i'] = s['k'] = s[','] = 0;
break;
case 9:
s['o'] = s['l'] = s['.'] = 0;
break;
case 10:
s['p'] = s[';'] = s['/'] = 0;
break;
}
}
- 2月 01 週二 201121:27
UVA 10393
文章標籤
全站熱搜
