0
点赞
收藏
分享

微信扫一扫

P3370 【模板】字符串哈希 题解

DT_M 2022-09-26 阅读 132

地址:​​https://www.luogu.org/problem/P3370​​

求不同字符串的数量  

    这题用set也可以过,但是hash更高大上嘛。

    哈希其实就是将一个字符串映射成一个值,并且要让这些值不能大概率地重复

    进制哈希:进制哈希的核心便是给出一个固定进制

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e4+19;
const ll base=129;  
const long long mod=212370440130137957ll;  //我也不知道为啥用这个,记住就行了
ll has[maxn];
char s[maxn];
int ac(char *s)
{
int len=strlen(s);
ll sum=0;
for(int i=0;i<len;i++)
{
sum=(sum*base+(ll)s[i])%mod;
}
return sum;
}
int main()
{
ll t;
scanf("%lld",&t);
for(int i=0;i<t;i++)
{
scanf("%s",s);
has[i]=ac(s);
}
sort(has,has+t);
ll cnt=1;
for(int i=0;i<t-1;i++)
{
if(has[i]!=has[i+1])
cnt++;
}
printf("%lld\n",cnt);
return 0;
}

 



举报

相关推荐

0 条评论