博客
关于我
YbtOJ hash和hash表课堂过关 例1 字符串哈希【hash】
阅读量:333 次
发布时间:2019-03-04

本文共 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;}

转载地址:http://rale.baihongyu.com/

你可能感兴趣的文章
Linux MySQL的socket文件存在位置更改
查看>>
Linux RPM和yum命令的使用技巧
查看>>
Python 使jupyter notebook 从指定浏览器启动 以及编程中途更换浏览器
查看>>
写博客常用的字体颜色(待续)
查看>>
C++ throw、try、catch、noexcept
查看>>
vim之vim滚屏与跳转
查看>>
C指针之函数指针与typedef
查看>>
CentOS8 字体大小调整
查看>>
设计模式之组合模式
查看>>
设计模式之外观模式
查看>>
Linux 验证、数字证书、RPM包中文件的提取
查看>>
《Redis开发与运维》阅读笔记:键管理之单个键管理
查看>>
(恋上数据结构笔记):优先级队列(Priority Queue)
查看>>
(Python学习笔记):条件语句
查看>>
(Python学习笔记):字典
查看>>
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
查看>>
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
查看>>
(C++11/14/17学习笔记):创建多个线程、数据共享问题分析及案例
查看>>
(QT学习笔记):按钮组中的常用控件
查看>>
(音视频学习笔记):SDL-YUV显示-播放音频PCM
查看>>