哈希表
洛谷3370 字符串哈希
思考:
1.哈希是在一定错误率的基础上进行的
2.哈希的模数最好是质数
3.使用自然溢出时应&0x7fffffff负数转正
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long int ll;
int n,c=1;
const int base = 123;
char buf[1500];
ll value[10000];
ll hash(){
ll ans = 0;
int len = strlen(buf);
for(int i = 0;i < len;i++){
ans = ans*base+(int)buf[i];
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%s",buf);
value[i] = hash();
}
sort(value,value+n);
for(int i = 0;i < n-1;i++){
if(value[i]!=value[i+1]){
c++;
}
}
printf("%d\n",c);
return 0;
}