#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
long long x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=x*10+(ch-'0');
ch=getchar();
}
return x*f;
}
#define ull unsigned long long
ull hash1[100001];
ull hash2[100001];
int cnt;
ull mod1=1e9+7;
ull mod2=1e9+9;
ull base=131;
ull power1[100001];
ull power2[100001];
void GetHash(string s)
{
cnt++;
int len=s.size()-1;
for(int i=0;i<=len;i++)
{
hash1[cnt]+=int(s[i])*power1[i];
hash2[cnt]+=int(s[i])*power2[i];
hash2[cnt]%=mod2;
}
}
void init()
{
power1[0]=1;
power2[0]=1;
for(int i=1;i<=100000;i++)
{
power1[i]=power1[i-1]*base;
power2[i]=power2[i-1]*base;
power1[i]%=mod1;
power2[i]%=mod2;
}
}
map<pair<ull,ull>,int>m;
map<ull,int>m2;
int main()
{
ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
string s1;
int n=read();
init();
for(int i=1;i<=n;i++)
{
cin>>s1;
GetHash(s1);
}
int ans=0;
for(int i=1;i<=n;i++)
{
/*if(m[make_pair(hash1[i],hash2[i])]==0)
{
m[make_pair(hash1[i],hash2[i])]++;
ans++;
}*/
if(m2[hash1[i]]==0)
{
m2[hash1[i]]++;
ans++;
}
}
cout<<ans<<endl;
return 0;
}
数据:
10
xEDHx
xEDHx
xEDHx
xEDHx
W4Zp
S2omTcV
AZ3XG
Oo2Ws5
QdKKAJY
xEDHx
本地结果正常,输出6
IDE直接干出来个1
难绷