YbtOJ hash和hash表课堂过关 例1 字符串哈希【hash】
发布日期:2021-05-07 13:09:58 浏览次数:6 分类:原创文章

本文共 638 字,大约阅读时间需要 2 分钟。

题目

在这里插入图片描述


思路

这道题是字符串。
我们把给每个字符串一个地址,
地址重复就往后取地址。
如果找到空地址,证明字符串没有出现过。
找到有相同字符串的地址,证明字符串是重复出现过的。
这样就可以解决这道题了。

代码

#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>using namespace std;const int P=13331;string s,h[20010];int n,ans;bool hs(string s){   	int sum=0,j=0;	for(int i=0; i<=s.size()-1; i++)	   sum=(sum*123+(s[i]-48))%P;	while(h[(sum+j)%P]!=""&&h[(sum+j)%P]!=s)	  j++;	if(h[(sum+j)%P]=="")	 {   	   h[(sum+j)%P]=s;       return 0;	 }    return 1;}int main(){   	//freopen("P3370_2.in","r",stdin);	cin>>n;	for(int i=1; i<=n; i++)     {        	cin>>s;     	if(hs(s)==0)     	  ans++;	 }	cout<<ans;	return 0;}
上一篇:2020-2021期末考试总结
下一篇:YbtOJ 字符串处理课堂过关 例5 生日相同【字符串】

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月04日 04时59分57秒