本文主要是介绍Intelligent IME hdu 4287,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
字典树,练习模版。
#include<cstdio>
#include<iostream>
using namespace std;
struct Trie
{int sum;Trie *next[8];Trie(){int i;for(i=0;i<8;i++)next[i]=NULL;sum=0;}
}*root=new Trie,*temp;
void DealTrie(char dic[])
{int i,k;temp=root;for(i=0;dic[i]!='\0';i++){if(dic[i]<='s')if(dic[i]=='s')k=5;elsek=(dic[i]-'a')/3;elseif(dic[i]=='z')k=7;elsek=(dic[i]-'t')/3+6;if(temp->next[k]!=NULL)temp=temp->next[k];elsetemp=temp->next[k]=new Trie;}++(temp->sum);
}
int FindTrie(char dic[])
{int i;temp=root;for(i=0;dic[i]!='\0';i++){if(temp->next[dic[i]-'2']!=NULL)temp=temp->next[dic[i]-'2'];elsereturn 0;}return temp->sum;
}
void Freedom(Trie* &p)
{if(p==NULL)return ;int i;for(i=0;i<8;i++)if(p->next[i]!=NULL)Freedom(p->next[i]);delete p;p=NULL;
}
int main()
{int n,m,i,t;char num[5003][8];char dic[8];cin>>t;while(t--){cin>>n>>m;for(i=0;i<n;i++)cin>>num[i];for(i=0;i<m;i++){cin>>dic;DealTrie(dic);}for(i=0;i<n;i++)cout<<FindTrie(num[i])<<endl;for(i=0;i<8;i++)Freedom(root->next[i]);}delete root;return 0;
}
这篇关于Intelligent IME hdu 4287的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!