• Letters比赛第六场1002 Babelfish解题报告


    1002 Babelfish (POJ 2503)

    解题思路:字符串的哈希,找一个比较好的hash函数就可以了,冲突时用链表的形式组织。用STL中的map等容器也可以过,不过性能差点。

     

    代码如下:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    #define N 1000005
    #define HASH 3999971
    
    struct node
    {
        char a[11];
        char b[11];
        int next;
    };
    
    struct node words[N];
    int head[HASH];
    int t = 0;
    
    int inline hash(char * key)
    {
        unsigned int h = 0;
        while (*key){
            h = (h << 4) + *key++;
            unsigned int g = h & 0xf0000000L;
            if (g) h ^= g >> 24;
            h &= ~g;
        }
        return h % HASH;
    }
    
    bool search(char s[])
    {
        int key = hash(s);
        int u = head[key];
    
        while(u)
        {
            if(strcmp(s, words[u].b) == 0)
            {
                t = u;
                return true;
            }
            else
            {
                u = words[u].next;
            }
        }
        return false;
    }
    
    int main()
    {
    #ifdef MYLOCAL
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
    
        int i = 1;
        char s[30];
    
        memset(head, 0, sizeof(head));
        while(gets(s) && strcmp(s, "") != 0)
        {
            sscanf(s, "%s %s", words[i].a, words[i].b);
            int key = hash(words[i].b);
            words[i].next = head[key];
            head[key] = i++;
        }
    
        while(scanf("%s", s) != EOF)
        {
            if(search(s) == true)
            {
                printf("%s\n", words[t].a);
            }
            else
            {
                printf("eh\n");
            }
        }
    
        return 0;
    }
  • 相关阅读:
    单片机爬坑记-02-资源紧缺
    单片机爬坑记-01-内核差异
    操作系统-第6章习题解析
    操作系统-第5章习题解析
    操作系统-第4章习题解析
    操作系统-第3章习题解析
    操作系统-第2章习题解析
    操作系统-第1章习题解析
    BugKu之xxx二手交易市场
    BugKu之备份是个好习惯
  • 原文地址:https://www.cnblogs.com/LETTers/p/2468967.html
Copyright © 2020-2023  润新知