本来想试试那个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; }
poj 2503 Babelfish
最新推荐文章于 2019-07-07 16:01:00 发布