hash 是个好东西啊。 用链表实现,数组实现, 把一
个字符串保存起来, 再查速度很快
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define MAXD 100003
char word[MAXD][12];
char dict[MAXD][12];
int head[MAXD] = {0};
int next[MAXD];
char t[15];
int hash(char w[]){
int L = strlen(w);
int sum = 0;
for(int i = 0;i < L;i++)
sum = 10 * sum + w[i];
return sum % MAXD;
}
int add(int n){
int x = hash(dict[n]);
next[n] = head[x];
head[x] = n;
return 1;
}
int search_word(){
int x = hash(t);
int u = head[x];
while(u){
if(strcmp(dict[u],t)==0) return u;
u = next[u];
}
return -1;
}
int main(){
int N = 1;
char str[30];
while (gets(str)){
if(str[0]=='\0')
break;
int i;
for(i = 0; str[i] != ' '; ++i)
word[N][i] = str[i];
word[N][i] = '\0';
char *p = str + i + 1;
i = 0;
while (*p)
dict[N][i++] = *p++;
dict[N][i] = '\0';
add(N);
++N;
}
while (gets(t)) {
int index = search_word();
if (index == -1)
puts("eh");
else
printf("%s\n", word[index]);
}
return 0;
}
个字符串保存起来, 再查速度很快