7-17 Hashing

題目

題意:二次探測消除衝突的哈希算法 

#include<iostream>
using namespace std;
int prime[1000002]= {1,1,0};
void isprime() {
	for(int i=2; i<1000002; ++i)
		if(!prime[i])
			for(int j=i*2; j<1000002; j+=i)
				prime[j]=1;
}
int main() {
	isprime();
	int m,n;
	cin>>m>>n;
	int t=m;
	for(int i=m; i<1000002; ++i)
		if(!prime[i]) {
			m=i;
			break;
		}
	int ans[n];
	for(int i=0; i<n; ++i)
		ans[i]=-1;
	int temp[m]= {0};
	for(int i=0; i<n; ++i) {
		int k;
		cin>>k;
		for(int j=0; j<=t; ++j) {
			int d=j*j;
			if(!temp[(k+d)%m]) {
				temp[(k+d)%m]=1;
				ans[i]=(k+d)%m;
				break;
			}
		}
	}
	cout<<ans[0];
	for(int i=1; i<n; ++i)
		if(ans[i]!=-1)
			cout<<" "<<ans[i];
		else cout<<" -";
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章