poj2503

来源:互联网 发布:大数据分析需要多少人 编辑:程序博客网 时间:2024/04/27 19:56

题目链接:http://poj.org/problem?id=2503

题意:就像翻译一样,输入一个单词,输出它所对应的一个单词。

解题思路:首先将后面待查询的单词构建成一棵trie树,在结构体中增加一个保存前面单词的一个字符串数组,在插入的时候,把要查询那个单词对应的单词存入数组中,以便在查询的时候,如果查询到就打印出对应的单词,否则打印出”eh”;

代码:
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;const int maxn=201314;struct Tree{    int next[26];    char wei[26];//在对应的树尾上加一个尾巴!    void init()    {        memset(next,-1,sizeof(next));    }} t[maxn];int cur=1;void creat(char ss[],int len,char ci[]){    int p=0;    for(int i=0; i<len; i++)    {        int x=ss[i]-'a';        if(t[p].next[x]==-1)        {            t[cur].init();            t[p].next[x]=cur++;        }        p=t[p].next[x];    }    strcpy(t[p].wei,ci);}void cha(char ss[]){    int p=0,i=0;    while(ss[i])    {        int x=ss[i]-'a';        if(t[p].next[x]==-1)        {            cout<<"eh"<<endl;            return ;        }        p=t[p].next[x];        i++;    }    cout<<t[p].wei<<endl;}int main(){    t[0].init();    char str1[2013],str2[2014];    while(gets(str1))    {        if(!strlen(str1))            break;        char qian[2013],hou[2014];        int p=0;        while(str1[p]!=' ')        {            qian[p]=str1[p];            p++;//把前面的单词提取出来!        }        qian[p]='\0';        int cnt=0;        for(int i=p+1; i<strlen(str1); i++)            hou[cnt++]=str1[i];//提取后半部分字符串!        hou[cnt]='\0';        creat(hou,strlen(hou),qian);    }    //cout<<"逗比么你是?\n";    while(gets(str2)!=NULL)        cha(str2);    return 0;}

0 0
原创粉丝点击