POJ 2503 Babelfish // 字符串映射,Trie

来源:互联网 发布:淘宝低价引流软件 编辑:程序博客网 时间:2024/05/21 11:18

题目描述

POJ 2503 Babelfish

解题思路

题目大意:
给一些单词A及其对应的单词B,比如 dog -> ogday, 然后再输入单词B,输出单词A,若输入的B不存在映射,则输出”eh“.

用STL的map应该可以水过去,但是还是用Trie实现一下~~

参考代码

//**********************************************//  Author: @xmzyt1996//  Date:   2015-10-15//  Name:   POJ 2503.cpp//**********************************************#include <cstdio>#include <cmath>#include <cctype>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#include <string>#include <bitset>#include <vector>#include <stack>#include <queue>#include <map>using namespace std;const int MAX_N = 100010;struct Trie {    int next[26];    char word[15];}node[MAX_N<<2];int num;void init() {    num = 0;    memset(node, 0, sizeof(node));}int getid(char c) { return c - 'a'; }void insert(char* s, char* p) {    Trie* head = &node[0];    while (*s) {        int id = getid(*s++);        if ((head->next[id]) == NULL)            head->next[id] = &node[++num];        head = head->next[id];    }    strcpy(head->word, p);}void search(char* s) {    Trie* head = &node[0];    while (*s) {        int id = getid(*s++);        if ((head->next[id]) == NULL) { // 说明树中不存在此单词            puts("eh");            return ;        }        head = head->next[id];    }    puts(head->word);}int main() {    char s[30], s1[15], s2[15];    init();    while(gets(s) && *s) {        sscanf(s, "%s %s", s1, s2);        insert(s2, s1);    }    while (~scanf("%s", s)) search(s);    return 0;}
0 0
原创粉丝点击