1. 程式人生 > 其它 >YbtOJ hash和hash表課堂過關 例1 字串雜湊【bfs】

YbtOJ hash和hash表課堂過關 例1 字串雜湊【bfs】

技術標籤:YbtOJ專項練習題題解hash雜湊表YbtOJ題解

題目

在這裡插入圖片描述


思路

這道題是字串雜湊
我們把給每個字串一個地址,
地址重複就往後取地址。
如果找到空地址,證明字串沒有出現過。
找到有相同字串的地址,證明字串是重複出現過的。
這樣就可以解決這道題了。

程式碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
using namespace std;
const int P=13331;
string s,
h[20010]; int n,ans; bool hs(string s) { int sum=0,j=0; for(int i=0; i<=s.size()-1; i++) sum=(sum*123+(s[i]-48))%P; while(h[(sum+j)%P]!=""&&h[(sum+j)%P]!=s) j++; if(h[(sum+j)%P]=="") { h[(sum+j)%P]=s; return 0; } return 1; } int main() { //freopen("P3370_2.in","r",stdin);
cin>>n; for(int i=1; i<=n; i++) { cin>>s; if(hs(s)==0) ans++; } cout<<ans; return 0; }