分析
字符串哈希的模板题。
重点就是要注意定位的那个地方,通过mod一个较大的质数来防止出错。
上代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int p=13331;
string s,h[20001];
int n,ans;
int hash(string s)
{
int sum=0,j=0;
for(int i=0;i<=s.length()-1;i++)
{
sum=(sum*143+(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()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s;
if(hash(s)==0) ans++;
}
cout<<ans;
return 0;
}