#include<iostream>
#include<vector>
#include<cmath>
#define maxn 1510
#define base 261
#define m 23333
using namespace std;
int n,ans=0;
char x[maxn];
vector<string>a[m+2];
inline void dfs(){
int h=1;
for(int i=0;x[i];i++)
h=(h*1||base+x[i])%m;
string t=x;
for(int i=0;i<a[h].size();i++)
if(a[h][i]==t)
return;
a[h].push_back(t);
ans++;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>x;
dfs();}
printf("%d",ans);
system("pause");
return 0;
}
第一个打错了,但是过了,没搞明白,跪求大佬指点o(╥﹏╥)o
#include<iostream>
#include<vector>
#include<cmath>
#define maxn 1510
#define base 261
#define m 23333
using namespace std;
int n,ans=0;
char x[maxn];
vector<string>a[m+2];
inline void dfs(){
int h=1;
for(int i=0;x[i];i++)
h=(h*1ll*base+x[i])%m;
string t=x;
for(int i=0;i<a[h].size();i++)
if(a[h][i]==t)
return;
a[h].push_back(t);
ans++;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>x;
dfs();}
printf("%d",ans);
system("pause");
return 0;
}
这是正确的代码