poj2503

题目链接: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值