这是char的
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull base=13331;
ull hashh[12345];
char c[10214];
int prime=233317;
ull mod= 2123704414014795711;
ull hashe()
{
int len=strlen(c);
ull ans=0;
for(int i=0;i<len;i++)
ans=(ans*base+c[i]-'0')&mod+prime;
return ans;
}
int main()
{
int n,cnt=1;
cin>>n;getchar();
for(int i=1;i<=n;i++)
{
scanf("%s",c);
hashh[i]=hashe();
}
sort(hashh+1,1+hashh+n);
for(int i=1;i<n;i++)
if(hashh[i]!=hashh[i+1])cnt++;
cout<<cnt<<endl;
return 0;
}
这是string的
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull base=13331;
ull hashh[12345];
string s;
int prime=233317;
ull mod= 2123704414014795711;
ull hashe()
{
int len=s.size();
ull ans=0;
for(int i=0;i<len;i++)
ans=(ans*base+s[i]-'0')&mod+prime;
return ans;
}
int main()
{
int n,cnt=1;
cin>>n;getchar();
for(int i=1;i<=n;i++)
{
getline(cin,s);
hashh[i]=hashe();
}
sort(hashh+1,1+hashh+n);
for(int i=1;i<n;i++)
if(hashh[i]!=hashh[i+1])cnt++;
cout<<cnt<<endl;
return 0;
}
自己运行都是完全正确的,不知道为什么用string只有80分,求大佬指点