【YBTOJ】字串雜湊
阿新 • • 發佈:2021-02-01
思路:
直接hash就可以了
c o d e code code
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, m;
string hash[16000];
unsigned long long P=1e9+7, M=13331;
bool h(string s)
{
long long num=0;
for(int i=0; i<s.size(); i++)
{
num=num*64+s[i]- 47;
num%=P;
}
num%=M;
if(hash[num]==s)
return 1;
if(hash[num]!=s&&hash[num]!="")
{
int j=num+1;
j%=M;
while(j!=num)
{
if(hash[j]==s)
return 1;
if(hash[j]=="")
{
hash[j]=s;
return 0;
}
j=(j+1)%M;
}
return 0;
}
if(hash[num]=="" )
{
hash[num]=s;
return 0;
}
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
{
string s;
cin>>s;
if(!h(s))
m++;
}
printf("%d", m);
return 0;
}