poj 2503 Babelfish

本来想试试那个ELFHash算法的功力的,哪知道错了,还是我三行的hash好。。。

#include <iostream>
#include <cstdio>
#include <string.h>
#include <map>
using namespace std;

map<int,char*> M;

int ELFHash(const char * str)
{
	int hash = 0;
	while(*str) hash = hash*107%10000007 + *str++;
	return hash;
	//unsigned int hash = 0;
	//unsigned int x    = 0;
	//while (*str)
	//{
	//	hash = (hash << 4) + (*str++);
	//	if ((x = hash & 0xF0000000L) != 0)
	//	{
	//		hash ^= (x >> 24);
	//		hash &= ~x;
	//	}
	//}
	//return (hash & 0x7FFFFFFF);
}

void getData(const char* buf){
	char *fir,*sec;
	int idx=0;
	fir = (char *)malloc(11*sizeof(char));
	sec = (char *)malloc(11*sizeof(char));
	while((*(fir+idx++) = *buf++) != ' ');
	*(fir+ --idx) = '\0';
	idx = 0;
	while( (*(sec+idx++) = *buf++ ) != '\0');
	M[ELFHash(sec)] = fir;
}

int main(){
	char buf[30];
	while(gets(buf),*buf)
		getData(buf);
	while(gets(buf)){
		int hash = ELFHash(buf);
		if(M.find(hash) == M.end() )
			printf("eh\n");
		else printf("%s\n",M[hash]);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值