| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:我用的trie树,输入时gets()为什么我的程序还是需要800ms。。哪位300ms以内ac的是怎么做的,还是我读数据太慢了阿?In Reply To:我用的trie树,输入时gets()为什么我的程序还是需要800ms。。哪位300ms以内ac的是怎么做的,还是我读数据太慢了阿? Posted by:shiningstar at 2005-08-19 19:20:03 > 我用的trie树,输入时gets()为什么我的程序还是需要800ms。。哪位300ms以内ac的是怎么做的,还是我读数据太慢了阿?
用tried树写的,250MS。请指教,^_^
/* poj2503, written by Dream, 2011/4/25 */
#include<iostream>
#include<cstring>
using namespace std;
const int Max = 260050;
const int branchNum = 26;
struct TriedNode
{
char re[12];
TriedNode *branch[branchNum];
};
TriedNode root;
TriedNode node[Max];
int p = 0;
void Initial()
{
memset((void*)node, 0, sizeof(node));
}
void Insert(char *word, char *re)
{
if (NULL == word)
{
return;
}
TriedNode *location = &root;
while(*word)
{
if (NULL == location->branch[*word - 'a'])
{
location->branch[*word - 'a'] = &node[p++];
}
location = location->branch[*word - 'a'];
++word;
}
strcpy(location->re, re);
}
void Search(char *res, char *word)
{
if (NULL == word)
{
return;
}
TriedNode *location = &root;
while(*word)
{
if (location->branch[*word - 'a'])
{
location = location->branch[*word - 'a'];
}
else
{
strcpy(res, "eh");
return;
}
++word;
}
strcpy(res, location->re);
}
int main()
{
// freopen("input.txt", "r", stdin);
char word[12];
char eng[12];
char res[12];
char ch = '\0';
Initial();
while(scanf("%s%s", eng,word) != EOF)
{
Insert(word, eng);
getchar();
ch = getchar();
if ('\n' != ch)
{
ungetc(ch, stdin);
continue;
}
break;
}
while(scanf("%s", word) != EOF)
{
Search(res, word);
printf("%s\n", res);
}
return 0;
};
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator