字符串哈希
解题思路
字符串Hash模板
设定一个方式求每一个字符串的hash值
再进行排序判重
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
const int MOD=13331;
int n,ans;
string s,h[13335];
bool hash()//hash判重
{
long long num;
int len=s.size();
for(int i=0;i<len;i++)//求值
num=num*64+int(s[i]),num%=1000000007;
num%=MOD;
if(h[num]==s)return 1;
if(h[num]!=s&&h[num]!="")//判断是否出现过
{
int i=num+1;
i%=MOD;
while(i!=num)
{
if(h[i]==s)return 1;
if(h[i]==""){
h[i]=s;return 0;}
i=(i+1)%MOD;
}
}
h[num]=s;
return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s;
if(!hash())ans++;
}
printf("%d",ans);
return 0;
}