电子学会六级-数据结构-哈希表

电子学会六级-数据结构-哈希表
【模板】字符串哈希
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

posted @ 2022-05-30 07:12  new-code  阅读(22)  评论(0编辑  收藏  举报