《ybtoj高效进阶》第二部分第二章例题1 字符串哈希

题目大意

给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;
}

猜你喜欢

转载自blog.csdn.net/weixin_49843717/article/details/112977083