#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;
    }
}


文章標籤
全站熱搜
創作者介紹
創作者 lettice0913 的頭像
lettice0913

斑的家

lettice0913 發表在 痞客邦 留言(0) 人氣(218)