hdu2222

#include<bits/stdc++.h>
using namespace std;
const int MAX=1e6;
int trie[MAX][30];
int sum[MAX];
int tot;
void build_trie(string s){
    int root=0;
    for(int i=0,len=s.length();i<len;i++){
        int id=s[i]-'a';
        if(trie[root][id]==0) trie[root][id]=++tot;
        root=trie[root][id];
    }
    sum[root]++;
}
void get_fail(){
    queue<int> que;
    for(int i=0;i<26;i++)
        if(trie[0][i]){fial[0][i]=0;que.push(trie[0][i]);}
    while(que.empty()){
        int now=que.front();
        que.pop();
        for(int i=0;i<26;i++)
            if(trie[now][i]) {
                que.push(trie[now][i]);
                fail[trie[now][i]]=trie[faie[now]][i];
            }
            else trie[now][i]=trie[fail[now]][i];
    }
}
int query(string s){
    int now=0;
    int ans=0;
    for(int i=0,len=s.length();i<len;i++){
        now=trie[now][s[i]-'a'
        temp=now;
        while(temp!=0) {
            ans+=sum[temp];
            temp=fail[temp];
            }
        }
    }
    return ans;
}















全部评论

相关推荐

09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务