题目大意
给n个字符串,求不重复字符串个数
思路
字符串哈希
code:
#include<cstdio>
#include<queue>
#include<iostream>
#include<algorithm>
#define myd 131
using namespace std;
unsigned long long a[1000010],tot;
unsigned long long n,m,s;
inline unsigned long long ip()
{
char c=getchar();
unsigned long long ans=0;
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
unsigned long long fu(string x)
{
unsigned long long o=0;
for (int i=0;i<x.size();i++)
{
o=o*131+x[i];
}
return o;
}
unsigned long long f(unsigned long long o)
{
unsigned long long i=0;
while (a[(o+i)%1000010]!=o&&a[(o+i)%1000010]) i++;
return (o+i)%1000010;
}
string x;
unsigned long long p;
int main()
{
n=ip();
for (int i=0;i<n;i++)
{
cin>>x;
p=fu(x);
if (a[f(p)]!=p)
{
a[f(p)]=p;
s++;
}
}
cout<<s;
return 0;
}