int Bkdrhash (char *str) { int131; int 0 ; while (*str) hash = hash * seed + (*str++); return 0x7FFFFFFF)% maxn;}
structhashmap{intHead[hash +Ten];intNEXT[MAXN +Ten];intVAL[MAXN +Ten];intANS[MAXN +Ten][ to]; intPOS[MAXN +Ten]; intsize; voidinit () {size=0; Memset (Head,-1,sizeof(head)); } intAskinta[]) { intt =0; for(inti =0; I < K; i++) T + =A[i]; intGG = (t%hash + Hash)%Hash; for(inti = Head[gg]; I! =-1; i =Next[i]) { if(Val[i] = =t) { intFlag =0; for(intj =0; J < K; J + +) { if(Ans[i][j]! =A[j]) {Flag=1; Break; } } if(Flag = =0)returnPos[i]; } } return-2; } voidInsertintA[],intp) {intt =0; for(inti =0; I < K; i++) T + =A[i]; intGG = (t%hash + Hash)%Hash;; for(inti = Head[gg]; I! =-1; i =Next[i]) { if(Val[i] = =t) { intFlag =0; for(intj =0; J < K; J + +){ if(Ans[i][j]! =A[j]) {Flag=1; Break; } } if(Flag = =0)return; }} Val[size]= t; Next[size] =Head[gg]; Pos[size]=p; for(inti =0; I < K; i++) Ans[size][i] =A[i]; HEAD[GG]= size++; }}m;
String hash Template