题意
给出一些字符串,求出其中不相同的有几个。
思路
我们可以用hash表或者C++STL中自带的map库,但前者比后者快,这里我两种方法都做了。
代码
hash
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
const int base=131;
int n,ans,h[10001];
char s[1501];
ull hash(char s[]) {//用string会1000ms+,不知为什么
int l=strlen(s);
ull f=0;
for (int i=0;i<l;i++) f=f*base+(ull)s[i];//自然溢出法不用加mod数,加了还会变慢
return f;
}
int main() {
scanf("%d",&n);
for (int i=1;i<=n;i++) {
scanf("%s",s);
h[i]=hash(s);
}
sort(h+1,h+n+1);
for (int i=1;i<=n;i++)
if (h[i-1]!=h[i]) ans++;
printf("%d",ans);
}
C++STLmap库
#include<map>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int n,ans;
string s;
map<string, int> hash;
int main() {
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
cin>>s;
if (!hash[s])//类似开一个桶
{
ans++;
hash[s]++;
}
}
printf("%d",ans);
}