POJ 2503 Babelfish

題目鏈接:http://poj.org/problem?id=2503


#include <cstdio>
#include <cstring>
#define MAXSIZE 150000
//#define maxn 30
#define kind 20
const int MOD = 131101; //一個大質數

struct HASH
{
    char pre[kind], now[kind];
    HASH *next;
    HASH() {
        next = NULL;
    }
} head[MAXSIZE], New[MAXSIZE];

int nn = 0;

//int ELFhash(const char *key){
//	unsigned long h = 0;
//	while(*key){
//		h = (h<<4) + *key++;
//		unsigned long g = h & 0xf0000000L;
//		if(g) {
//            h ^= g >> 24;
//            h &= ~g;
//		}
//	}
//	return h%MOD;
//}

int RKHash(char *str)
{
    unsigned long hash = 0;
    while (*str) {
        hash = (hash * 26) + (*str - 'a');
        str++;
    }
    return (hash % MOD);
}

void Find(char a[])
{
    int key = RKHash(a);
    //int key = ELFhash(a);
    HASH *p = head[key].next;
    bool flag = false;
    while (p) {
        if (strcmp(p->now, a) == 0) {
            flag = true;
            printf("%s\n", p->pre);
            break;
        }
        p = p->next;
    }
    if (!flag) printf("eh\n"); //找不到
}

void Insert(char a[], char b[])
{
    //int key  = ELFhash(b);
    int key = RKHash(b);
    HASH *p = &New[nn++];
    strcpy(p->now, b);
    strcpy(p->pre, a);
    p->next = NULL;
    p->next = head[key].next;
    head[key].next = p;
    //delete p;
}

void init()
{
    nn = 0;
    for (int i = 0; i < MAXSIZE; i++) {
        head[i].next = NULL;
    }
}

int main()
{
    //init();
    char a[22], b[11], c[11];
    while(gets(a), a[0]) {
        sscanf(a, "%s%s", b, c);
        Insert(b, c);
    }
    while(~scanf("%s", a)) {
        Find(a);
    }
    return 0;
}



發佈了40 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章