我怀疑本题并不能体现字典树的最明显特征

P8306 【模板】字典树

yummy @ 2022-12-18 14:02:33

如题,首先我们发现,字符串哈希板板 也是某种匹配。

因此我们非常合理地认为,只要我们把读入字符串的所有前缀全部丢到哈希表里面,这题就做完了。

尽管我退役了,但是我还是花了 10 分钟写了下面这个玩意:

#include<bits/stdc++.h>
using namespace std;
#define u128 unsigned long long
unordered_map<u128,int> tr;
int T,n,q;
u128 v[3000005];
char s[3000005];
int main()
{
    v[0]=1;
    for(int i=1;i<=3000000;i++)
        v[i]=v[i-1]*131;
    for(scanf("%d",&T);T;T--)
    {
        scanf("%d%d",&n,&q);
        tr.clear();
        for(int i=1;i<=n;i++)
        {
            scanf("%s",s);
            u128 tot=0;
            for(int j=0;s[j];j++)
            {
                tot+=s[j]*v[j];
                if(tr.count(tot))tr[tot]++;
                else tr[tot]=1;
            }
        }
        for(;q;q--)
        {
            scanf("%s",&s);
            u128 tot=0;
            for(int j=0;s[j];j++)
                tot+=s[j]*v[j];
            if(tr.count(tot))printf("%d\n",tr[tot]);
            else puts("0");
        }
    }
    return 0;
}

一举 AC 本题。

我觉得,考察字典树的话,应该还是要加入偏序关系(例如“字典序不大于 s 的字符串有几个”),否则不管怎么加强,感觉哈希橄榄都是防不住的。


by char_cha_ch @ 2022-12-18 14:28:42

感觉真正的字典树模板是 P2580?


by zhaoyp @ 2022-12-18 14:31:47

1


by Register_int @ 2022-12-18 14:32:05

@kirihara233 那也能哈希(


by char_cha_ch @ 2022-12-18 14:34:34

所以得出结论,看管理怎么看。


by 一扶苏一 @ 2023-01-31 23:40:35

@yummy 模板题好像没有卡其他做法的必要……比如快排的模板也不能卡住直接 std::sort。我认为有个给人测板子和辅助刚学对应算法的人检验所学的功能就够了


|