UVA 10391 - Compound Words 字符串hash

2014-11-24 09:00:26 · 作者: · 浏览: 0

题目大意:

给定一个词典(已经按照字典序排好),要求找出其中所有的复合词,即恰好由两个单词连接而成的单词。(按字典序输出)

思路:

对于每个单词,存入Hash表,然后对每个单词拆分。

Hash函数的选取可以看:https://www.byvoid.com/blog/string-hash-compare/

我的这个是BKDRHash。

乘以一个比他大的素数。

关于:0x7fffffff(即int_max,最大的整型范围。why 16进制每位由4个二进制表示,7二进制位0111,其他的f为1111.)

#include
  
   
#include
   
     const int MAXN=120000+10; int head[MAXN],len,n; char data[MAXN][30]; typedef unsigned long long LL; struct edge { int index,next; }e[MAXN]; int gethash(char *s) { LL seed=131; LL res=0; int L=strlen(s); for(int i=0;i