Babelfish(map or 字典树)

题意:就是对应翻译,如果没有找到翻译就输出“eh”。分析:首选就想到了map去做,,然后AC了。最近在做字典树的题目,于是用字典树也写了一遍。题目链接:?id=2503map代码:#include<map>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAX = 27 ;const int MAXN = 100000 + 5 ;map<string,int>m;int num = 0 , len;char s[MAXN][MAX],str[MAXN];int main(){//freopen("liuchu.txt","r",stdin);while(gets(s[num])&&s[num][0]!='\0'){len = strlen(s[num]);int first = 0, k = 0;for(int i=0;i<len;i++){if(first) str[k++]=s[num][i];else if(s[num][i]==' '){first = 1;s[num][i]='\0';}}m[str]=num++;memset(str,'\0',sizeof(str));}while(scanf("%s",str)!=EOF){if(m.count(str))printf("%s\n",s[m[str]]);elseprintf("eh\n");}return 0;}trie代码:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const int MAX = 27 ;const int MAXN = 100000 + 5 ;struct trie{int point;trie *next[MAX];};int number = 0 ;char s[MAXN][MAX],str[MAX];trie *root=new trie;void createTrie(char *s,int n){trie *p=root,*q;int len=strlen(s),pos;for(int i=0;i<len;i++){pos=s[i]-'a';if(p->next[pos]==NULL){q=new trie;for(int j=0;j<MAX;j++)q->next[j]=NULL;p->next[pos]=q;p=p->next[pos];}else{p=p->next[pos];}}p->point=n;}int findTrie(char *s){trie *p=root;int len=strlen(s),pos;for(int i=0;i<len;i++){pos=s[i]-'a';if(p->next[pos]==NULL)return -1;p=p->next[pos];}return p->point;}void delTrie(trie *Root){for(int i=0;i<MAX;i++){if(Root->next[i]!=NULL)delTrie(Root->next[i]);}free(Root);}int main(){//freopen("liuchu.txt","r",stdin);for(int i=0;i<MAX;i++)root->next[i]=NULL;while(gets(s[number])&&s[number][0]!='\0'){int len=strlen(s[number]),k=0 ;bool judge=false;for(int i=0;i<len;i++){if(judge) str[k++]=s[number][i];if(s[number][i]==' '){s[number][i]='\0';judge=true;}}createTrie(str,number);number++;}while(scanf("%s",str)!=EOF){int pose=findTrie(str);if(pose==-1)printf("eh\n");elseprintf("%s\n",s[pose]);}delTrie(root);return 0;}

为何是一个人?也有善意的提醒:

Babelfish(map or 字典树)

相关文章:

你感兴趣的文章:

标签云: