poj2503Babelfish

更新时间:2023-05-22 20:38:15 阅读: 评论:0

poj2503Babelfish
Babelfish
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 40985Accepted: 17467
Description
You have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.
Input
Input consists of up to 100,000 dictionary entries, followed by a blank line, followed by a message of up to 100,000 words. Each dictionary entry is a line containing an English word, followed by a space and a foreign language word. No foreign word appears more than once in the dictionary. The message is a quence of words in the foreign language, one word on each line. Each word in the input is a quence of at most 10 lowerca letters.
Output
Output is the message translated to English, one word per line. Foreign words not in the dictionary should be translated as "eh".
Sample Input
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay
atcay
ittenkay
oopslay
Sample Output
cat
eh
loops
Hint
Huge input and output,scanf and printf are recommended.
题意是
输⼊⼀个字典,字典格式为“英语à外语”的⼀⼀映射关系
然后输⼊若⼲个外语单词,输出他们的英语翻译单词,如果字典中不存在这个单词,则输出“eh”
输⼊输出都是你如果多输出⼀个回车就会结束的
这题竟然归为了hash所以我⽤的是hash的⽅法,其实就⽤简单的map函数就可以直接⽤了,map好像是1900MS左右,hash我⽤的是⼤约在1600MS左右
代码如下
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
#include <vector>
练肺活量最有效方法#define MAX 14997
#define MAX 14997
using namespace std;
struct node
{
char ch[102];
char ch1[102];
};
vector<node>v[15000];
int hash ( char str1[] )
{
int i;
int len = strlen(str1);
int pos = 0;
for ( i = 0; i < len; i++ )
花市灯如昼{
pos = pos+(int)str1[i]*(1+ i);
}
return pos%MAX;
}
int find ( char ch[], char ch1[] )
{
if ( strcmp ( ch, ch1) == 0 )
{
return 1;
}
return 0;
12月3日是什么星座
}
int main()
{
char str[102], str1[102];
char a[200];
int i;
while ( gets(a) &&a[0]!='\0' )
{
/*Separating element  分离元素*/
sscanf ( a,"%s %s", str, str1) ;
int pos = hash ( str1 );
/
*Storage of data  储存数据*/
node temp;
strcpy( temp.ch, str );
strcpy( temp.ch1, str1 );
v[pos].push_back(temp);
}
while ( gets(a) &&a[0]!='\0'  )
{
int pos = hash ( a );
int ok = 1;
for ( i = 0;i < v[pos].size(); i++ )
{
/*Fine the same elements  查找相同元素*/            if ( find( v[pos][i].ch1, a ) )
{
printf ("%s\n", v[pos][i].ch );
ok = 0;
break;
}
}
if ( ok == 1 )
{
printf("eh\n");
}
}
}
⽤字典树更省时
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
typedef struct DicTrie
{
struct DicTrie *next[26];
char word[11];
int isWord;
}*Trie;
void inrtWord( Trie node, char *stc, char *str ) {
int id, i;
while ( *str )
{
id = *str-'a';
龙的象征意义if ( node->next[id] == NULL )
{
node->next[id] = new DicTrie;
node->next[id]->isWord = 0;
for ( i = 0;i < 26; i++ )
{
node->next[id]->next[i] = NULL;
}
}
node = node->next[id];
str++;
}
node->isWord = 1;
strcpy( node->word, stc );
}
char* SearchWord(Trie node,char* st)
{
int id;
while(*st)
{
id=*st-'a';
if(node->next[id]==NULL)
{
return "eh";
}
node=node->next[id];
st++;
}
if(node->isWord)
{
return node->word;
}
el
{
return "eh";
}
}
}
int main()
{
int i;
char stc[11], str[11], st[25];王小波小说
Trie node;
node = new DicTrie;
node->isWord = 0;
for ( i = 0;i < 26; i++ )
血糖高能吃
{
node->next[i] = NULL;
}
while ( gets(st) && st[0] != 0)
{
sscanf ( st,"%s %s", stc, str) ;
inrtWord(node, stc, str);
}
while ( ~scanf ( "%s", st ) )
{
2018年生肖char *sum = SearchWord(node, st);        printf ( "%s\n" ,sum );
}
离休和退休的区别}
代码菜鸟,如有错误,请多包涵

本文发布于:2023-05-22 20:38:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/923979.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:单词   字典   输出   元素
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图