题解 P3370 【【模板】字符串哈希】
代码
C++ STL做法:
#include <iostream>
#include <vector>
using namespace std;
vector <string> linker[1502];
int ans; //用于记录字符串的数量
void ins(string s) {
int v=s.length(); //以长度分类
for (int i=0;i<linker[v].size();i++) //从容器的头遍历到尾
if (linker[v][i]==s) //如果已经出现过,则直接返回
return;
linker[v].push_back(s); //否则追加到末尾
ans++; //数量++
}
int main() {
int n;
string x;
cin >> n;
for (int i=0;i<n;i++) {
cin >> x;
ins(x);
}
cout << ans;
return 0;
}
满分AC
分析
我看到题解区里的人好像都是用标准做法To Be Continued也就是把字符串里的每一个字符balabala……为什么省略,因为我不会做
而我的做法,则是按照字符串的长度来进行hash,详见注释
当然可以用map做,不过没有挑战性,我们一般称这种人为挂B