zoukankan      html  css  js  c++  java
  • hdu-4287 Intelligent IME

    思路:

    AC了很爽。一开始看题的时候把要求的东西给搞反了,是用字母去找相应的数字出现次数。

    只要用数字构建个Trie树,然后将每次输入进来的字母字符串给转换成数字,然后search一下就可以。

    其中要注意end和id的灵活运用

    AC代码:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    struct node
    {
        int e,id;
        struct node* next[10];
    };
    node* root = new node();
    char hashs[150];
    char str[5007][10];
    int ans[5007];
    
    void init()
    {
        hashs['a']=hashs['b']=hashs['c']='2';  
        hashs['d']=hashs['e']=hashs['f']='3';  
        hashs['g']=hashs['h']=hashs['i']='4';  
        hashs['j']=hashs['k']=hashs['l']='5';  
        hashs['m']=hashs['n']=hashs['o']='6';  
        hashs['p']=hashs['q']=hashs['r']=hashs['s']='7';  
        hashs['t']=hashs['u']=hashs['v']='8';  
        hashs['w']=hashs['x']=hashs['y']=hashs['z']='9';  
    }
    
    void insert(char* s,int mark)
    {
        node* p = root;
        for(;*s!='';s++)
        {
            int n = *s-'0';
            if(p->next[n] == NULL)
                p->next[n] = new node();
            p = p->next[n];
        }
        p->e = 1;
        p->id = mark;
    }
    
    void search(char* s)
    {
        node* p = root;
        for(;*s!='';s++)
        {
            int n = *s-'0';
            if(p->next[n] == NULL) return ;
            p = p->next[n];
        }
        if(p->e == 1) ans[p->id]++;
    }
    
    int main()
    {
        int i,j,k;
        init();
        int T;
        cin>>T;
        while(T--)
        {
            memset(ans,0,sizeof(ans));
            int n,m;
            cin>>n>>m;
            for(i = 0;i < n;i++)
            {
                cin>>str[i];
                insert(str[i],i);
            }
            char tmp[10];
            for(j = 1;j <= m;j++)
            {
                cin>>tmp;
                for(k = 0;k < strlen(tmp);k++)
                    tmp[k] = hashs[tmp[k]];
                search(tmp);
            }
            for(i = 0;i < n;i++) 
                cout<<ans[i]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    awk例子
    vsftp搭建
    makefile里PHONY的相关介绍
    youget帮助使用手册
    正则表达式全集
    常用的正则表达式
    基本用法
    心情
    asp.net和java
    java and asp.net
  • 原文地址:https://www.cnblogs.com/immortal-worm/p/5200353.html
Copyright © 2011-2022 走看看