题解 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