P8306 WA on #2 #3 #4 求助
  • 板块灌水区
  • 楼主OneLeft
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/9 08:34
  • 上次更新2023/11/3 05:04:02
查看原帖
P8306 WA on #2 #3 #4 求助
574215
OneLeft楼主2023/8/9 08:34

rt

#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
class Trie
{
    private:
        int first,edge[N][65],sum[N];
    public:
        void init()
        {
            for(int i=0;i<=first;i++)
            {
                sum[i]=0;
                for(int j=0;j<=59;j++)edge[i][j]=0;
            }
            first=0;
        }
        int get_value(char x)
        {
            if(x>='0'&&x<='9')return x-'0';
            if(x>='a'&&x<='z')return x-'a'+10;
            return x-'A'+36;
        }
        void insert(string x)
        {
            int root=0,len=x.size(),value;
            x=' '+x;
            for(int i=1;i<=len;i++)
            {
                value=get_value(x[i]);
                if(edge[root][value]==0)edge[root][value]=++first;
                root=edge[root][value];
                sum[root]++;
            }
        }
        int query(string x)
        {
            int root=0,len=x.size(),value;
            x=' '+x;
            for(int i=1;i<=len;i++)
            {
                value=get_value(x[i]);
                if(edge[root][value]==0)return 0;
                root=edge[root][value];
            }
            return sum[root];
        }
}trie;
string x;
int T,n,m;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>T;
    while(T--)
    {
        trie.init();
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            cin>>x,trie.insert(x);
        for(int i=1;i<=m;i++)
        {
            cin>>x;
            cout<<trie.query(x)<<'\n';
        }
    }
    return 0;
}
2023/8/9 08:34
加载中...