题目描述
解题思路
题目大意:
给一些单词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;
}