第一次正式用hash表。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn = 25500; const int HASH = 1000003; char s[maxn][20]; int head[HASH],next[maxn]; int dp[maxn]; int n; char temp[20]; //变出来的字符串 int hash(char *s) { int seed = 131; int ret = 0; while(*s) { ret = ret * seed + *(s++); } return (ret & 0x7fffffff ) % HASH ; } void input() { n = 1; memset(head,-1,sizeof(head)); while(scanf("%s",s[n]) == 1) { int id = hash(s[n]); next[n] = head[id]; head[id] = n; n++; } n--; } int search() { int i; int id = hash(temp); for(i=head[id]; i!=-1; i=next[i]) { if(strcmp(temp,s[i]) == 0) break; } return i; } void add(int cur,int loc,int addnum) { int len = strlen(s[cur]); int i,j; for(i=0,j=0; i<loc; i++) { temp[j++] = s[cur][i]; } temp[j++] = 'a' + addnum; for(; i<len; i++) { temp[j++] = s[cur][i]; } temp[j] = '