题目
https://www.luogu.org/problemnew/show/P3370
解题思路
hash[s]=∑i=0s.size()∗(i+1)
h
a
s
h
[
s
]
=
∑
i
=
0
s
.
s
i
z
e
(
)
∗
(
i
+
1
)
然后就是正常的哈希表了, ans a n s 累求重复的数量,输出 n−ans n − a n s 。
代码
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
const int inf=30001;
string s,hash[inf];
int n,ans;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
cin>>s; int g=0;
for(int i=0;i<s.size();i++) g+=s[i];
g%=inf;
while (hash[g]!=s&&hash[g]!="") g=(g+1)%inf;
if (hash[g]=="") hash[g]=s; else ans++;
}
printf("%d",n-ans);
}