救命!!!为什么用Hash表WA了3个点???求调!!!
查看原帖
救命!!!为什么用Hash表WA了3个点???求调!!!
1322746
Noah03楼主2024/12/14 01:54
#include<bits/stdc++.h>
using namespace std;
const int mod=10007,base=130;
vector<string> a[mod+10];
vector<int> b[mod+10];
int len=0;
bool delflag=false;
long long hash_(string name){
	long long h=1;
	for(int i=0;i<name.size();i++){
		h=(1ll*(h*base+name[i]))%mod;
	}
	return h; 
}
void insert(string name,int score){
	long long h=hash_(name);
	bool flag=false;
	for(int i=0;i<a[h].size();i++){
		if (a[h][i]==name){
			b[h][i]=score;
			flag=true;
			break;
		}
	}
	if (!flag){
		a[h].push_back(name);
		b[h].push_back(score);
		len++;
	}
	printf("OK\n");
	return;
}
int find(string name){
	long long h=hash_(name);  
	if (b[h].empty()) return -1;
	else return b[h][0];  
}
void del(string name){
	long long h=hash_(name);
	if (b[h].empty()) return;
	else{
		len--;
		a[h].erase(a[h].begin());
		b[h].erase(b[h].begin());
		delflag=true;
	}
	return;
}
int main(){
	int q,cz,x;
	cin>>q;
	string s;
	while(q--){
		scanf("%d",&cz);
		delflag=false;
		if (cz==1){
			cin>>s>>x;
			insert(s,x);
		}
		else if (cz==2){
			cin>>s;
			if (find(s)!=-1) printf("%d\n",find(s));
			else printf("Not found\n");
		}
		else if (cz==3){
			cin>>s;
			del(s);
			if (delflag) printf("Deleted successfully\n");
			else printf("Not found\n");
		}
		else{
			printf("%d\n",len);
		}
	}	           
	return 0;
}
2024/12/14 01:54
加载中...