#include <iostream>
#include<string>
#include<algorithm>
#include<cstring>
using namespace std;
const int MAXN=1e6+5;
int a[MAXN];
typedef unsigned long long ull;
int main()
{
int n;
cin>>n;
int ans=0,tot=0;
while(n--)
{
ull p=331;//取模数
ull x=0;
string ss;
cin>>ss;
for(int i=0;i<ss.size();i++)
x=x*p+ss[i];
a[++tot]=x;
}
sort(a+1,a+1+tot);
cout<<unique(a+1,a+1+tot)-a-1<<endl;
//输出不同字符串的个数
//cout << "Hello world!" << endl;
return 0;
}
优秀一点的
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#define lli long long int
using namespace std;
const int MAXN=100001;
const long long int mod=212370440130137957;
int seed=27;
void read(int &n)
{
char c='+';int x=0;bool flag=0;
while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
while(c>='0'&&c<='9')x=x*10+c-48,c=getchar();
n=flag==1?-x:x;
}
char a[MAXN];
map<int,bool>happen;
int tot=0;
int main()
{
int n;
read(n);
for(int i=1;i<=n;i++)
{
long long base=1;
scanf("%s",a);
int la=strlen(a);
for(int j=0;j<la;j++)
base=(base*seed+(a[j]) )%mod;
if(!happen[base])
happen[base]=1,tot++;
}
printf("%d",tot);
return 0;
}
大质数