这题用哈希能AC吗?90分求欧皇
查看原帖
这题用哈希能AC吗?90分求欧皇
526890
Kaneki__Ken楼主2024/1/24 18:25
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int i,n,m;
const long long inf=136071173;
char f[136110099];
char c[1555];
int check(char c){
	if(c>='a'&&c<='z'){
		return (c-'a');
	}
}
void Hash(int x){
	int len=strlen(c+1);
	long long ans=0;
	for(int i=1;i<=len;i++){
		ans=(ans*26+check(c[i]))%inf;
	}
	f[ans]=1;
}
void Hashc(){
	int len=strlen(c+1);
	long long ans=0;
	for(int i=1;i<=len;i++){
		ans=(ans*26+check(c[i]))%inf;
	}
	if(f[ans]==1)printf("OK\n"),f[ans]++;
	else if(f[ans]==0)printf("WRONG\n");
	else printf("REPEAT\n");
}
int main(){
//	freopen("3.in","r",stdin);freopen("3.out","w",stdout);
	cin>>n;
	for(i=1;i<=n;i++){
		scanf("%s",c+1);
		Hash(i);
	}
	cin>>m;
	for(i=1;i<=m;i++){
		scanf("%s",c+1);
		Hashc();
	}
	fclose(stdin);fclose(stdout);
	return 0;
} 

通过更改inf的值可以得到不同的分数,最大90分

2024/1/24 18:25
加载中...