• Prefix


    Prefix

    南昌邀请赛的题,字典树

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll A[26];
    string s[100005];
    ll trie[200008][26];
    ll v[200005];
    ll tot=1;
    ll cnt[200005];
    ll B[100005];
    ll n,mod;
    void insert(string s,int x)
    {
        int p=1;
        int len=s.length();
        ll t=1;
        for(int i=0;i<len;i++){
            t=(t*A[s[i]-'a'])%mod;
            if(trie[p][s[i]-'a']==0){
                trie[p][s[i]-'a']=++tot;
            }
            p=trie[p][s[i]-'a'];
            cnt[p]++;
            v[p]=t;
        }
        B[x]=t;
    }
    ll ans=0;
    void search(string s,int x)
    {
        int p=1;
        int len=s.length();
        for(int i=0;i<len;i++){
            p=trie[p][s[i]-'a'];
            if(v[p]>B[x]){
                ans+=cnt[p];
            }
        }
    }
    int main()
    {
        
        scanf("%lld%lld",&n,&mod);
        for(int i=0;i<26;i++){
            scanf("%lld",&A[i]);
        }
        for(int i=0;i<n;i++){
            cin>>s[i];
            insert(s[i],i);
        }
        for(int i=0;i<n;i++){
            search(s[i],i);
            cout<<ans<<' ';
            ans=0;
        }
        
        
    }
  • 相关阅读:
    11-Mybatis中使用PageHelper分页插件
    10-Mybatis使用注解开发
    Windows快捷键
    环境搭建
    计算机基础
    oracle语句
    oracle
    测试质量和类型
    测试基础
    项目部署和总结
  • 原文地址:https://www.cnblogs.com/liulex/p/11274041.html
Copyright © 2020-2023  润新知