1. 程式人生 > 其它 >【YBTOJ】字串雜湊

【YBTOJ】字串雜湊

技術標籤:題解hash

在這裡插入圖片描述

思路:

直接hash就可以了

c o d e code code

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n, m;
string hash[16000];
unsigned long long P=1e9+7, M=13331;
bool h(string s)
{
	long long num=0;
	for(int i=0; i<s.size(); i++)
	{
		num=num*64+s[i]-
47; num%=P; } num%=M; if(hash[num]==s) return 1; if(hash[num]!=s&&hash[num]!="") { int j=num+1; j%=M; while(j!=num) { if(hash[j]==s) return 1; if(hash[j]=="") { hash[j]=s; return 0; } j=(j+1)%M; } return 0; } if(hash[num]==""
) { hash[num]=s; return 0; } } int main() { scanf("%d", &n); for(int i=1; i<=n; i++) { string s; cin>>s; if(!h(s)) m++; } printf("%d", m); return 0; }