poj 2503 字符串hash

题目链接:http://poj.org/problem?id=2503

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

const int maxn = 100050;
const int HASH = 1000003;

int head[HASH],next[maxn];
char s1[maxn][15],s2[maxn][15];
int n;

int hash(char *s)
{
    int ret = 0;
    int seed = 131;
    while(*s)
    {
        ret = ret * seed + *(s++);
    }
    return (ret & 0x7fffffff) % HASH;
}

int search(char *s)
{
    int i;
    int id = hash(s);
    for(i=head[id]; i!=-1; i=next[i])
    {
        if(strcmp(s,s2[i]) == 0)
            break;
    }
    return i;
}

void input()
{
    memset(head,-1,sizeof(head));
    n = 0;
    char ch[30];
    gets(ch);
    while(ch[0] != '')
    {
        int i=0,j;
        for(i=0,j=0; ch[i]!=' '; i++,j++)
            s1[n][j] = ch[i];
        s1[n][j] = '';
        i++;
        for(j=0; ch[i]!=''; i++,j++)
            s2[n][j] = ch[i];
        s2[n][j] = '';

        int id = hash(s2[n]);
        next[n] = head[id];
        head[id] = n;
        n++;
        gets(ch);
    }
}

void solve()
{
    char ch[15];
    while(scanf("%s",ch) == 1)
    {
        int id = search(ch);
        if(id == -1)
        {
            printf("eh
");
        }
        else
        {
            printf("%s
",s1[id]);
        }
    }
}
int main()
{
  //  freopen("E:\acm\input.txt","r",stdin);
    input();
    solve();
}
View Code
原文地址:https://www.cnblogs.com/acmdeweilai/p/3364018.html