电子学会六级-数据结构-哈希表
电子学会六级-数据结构-哈希表
【模板】字符串哈希
https://www.luogu.com.cn/problem/P3370
#include<bits/stdc++.h>
using namespace std;
const int maxn=1510;
const int base=131,mod=2333;
int n,ans;
string s;
vector<string> ht[mod+2];//动态数组
void insert(){
int hash=1;
for(int i=0;i<s.size();i++){
hash=(hash*base+s[i])%mod;//使用进制构造hash值
}
for(int i=0;i<ht[hash].size();i++){//根据hash 查找如果存在 不再放入
if(ht[hash][i]==s){
return;
}
}
ht[hash].push_back(s);//放入动态数组
ans++;//不同数++
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
insert();
}
cout<<ans<<endl;
return 0;
}
[NOIP2007 提高组] 统计数字
https://www.luogu.com.cn/problem/P1097
#include<bits/stdc++.h>
using namespace std;
const int maxN=200005;
const int distinctN=10005;
int a[maxN],mod=10001;
struct node{
int number;
int cnt=0;
node(int nNum,int nCnt){
number=nNum;
cnt=nCnt;
}
};
vector<node> ht[distinctN];
int n;
void initMap(){
for(int i=0;i<n;i++){
bool flag=false;
for(int j=0;j<ht[a[i]%mod].size();j++){
if(ht[a[i]%mod][j].number==a[i]){
ht[a[i]%mod][j].cnt++;
flag=true;
break;
}
}
if(!flag){
ht[a[i]%mod].push_back(node(a[i],1));
}
}
}
int getMap(int key){
for(int j=0;j<ht[key%mod].size();j++){
if(ht[key%mod][j].number==key){
return ht[key%mod][j].cnt;
}
}
return -1;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
initMap();
sort(a,a+n);
n=unique(a,a+n)-a;
for(int i=0;i<n;i++){
cout<<a[i]<<" "<<getMap(a[i])<<endl;
}
}
/*
6
1500000000
1499999999
1400000000
1499999999
1399999999
1234567890
*/
[USACO16DEC]Cities and States S
https://www.luogu.com.cn/problem/P3405
【模板】哈希表
https://www.luogu.com.cn/problem/T124433
[JLOI2011]不重复数字
https://www.luogu.com.cn/problem/P4305
** [USACO3.2]魔板 Magic Squares**
https://www.luogu.com.cn/problem/P2730
[TJOI2010] 阅读理解
https://www.luogu.com.cn/problem/P3879
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习