題目大意:
給定一個詞典(已經按照字典序排好),要求找出其中所有的復合詞,即恰好由兩個單詞連接而成的單詞。(按字典序輸出)
思路:
對於每個單詞,存入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