病毒侵袭

版子题,练手

#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
const int max_n = 1e5 + 100;
set<int> ans;
queue<int> que;
struct AC_Automation {
    int teir[max_n][130];
    int cnt = 1;int tot = 0;
    int is[max_n];
    int fail[max_n];
    void insert(char* p) {
        int cur = 0;int n = strlen(p);
        for (int i = 0;i < n;++i) {
            if (teir[cur][p[i]] == 0)
                teir[cur][p[i]] = cnt++;
            cur = teir[cur][p[i]];
        }is[cur] = ++tot;
    }void build() {
        for (int i = 1;i < 130;++i)
            if (teir[0][i] != 0)
                que.push(teir[0][i]);
        while (!que.empty()) {
            int  u = que.front();que.pop();
            for (int i = 1;i < 130;++i) {
                if (teir[u][i] != 0) {
                    fail[teir[u][i]] = teir[fail[u]][i];
                    que.push(teir[u][i]);
                }
                else teir[u][i] = teir[fail[u]][i];
            }
        }
    }void quiry(char* s) {
        int n = strlen(s);
        int cur = 0;
        for (int i = 0;i < n;++i) {
            cur = teir[cur][s[i]];
            for (int j = cur; j && is[j] != 0; j = fail[j])
                ans.insert(is[j]);
        }
    }
}ac;
char p[210];
char s[max_n];
int N, M;
int main() {
    ios::sync_with_stdio(0);
    cin >> N;
    for (int i = 1;i <= N;++i) {
        cin >> p;
        ac.insert(p);
    }ac.build();
    cin >> M;int total = 0;
    for (int i = 1;i <= M;++i) {
        cin >> s;
        ac.quiry(s);
        if (!ans.empty()) {
            ++total;
            cout << "web " << i << ":";
            for (int it : ans)
                cout << " " << it;
            cout << endl;
        }ans.clear();
    }cout << "total: " << total << endl;
}
Kuangbin刷题详解(AC自动机) 文章被收录于专栏

AC自动机

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:39
在记录秋招的大魔王很...:别被忽悠了,我做了多年销售。我可以告诉你,这就是忽悠你的,销售一定要看底薪也要看提成两者不可缺一。提成是有业绩的时候才拿的到的,谁能保证一直有单状态都好。销售有时候很讲究运气的。底薪是你这个人这个岗位日常工作体现的价值。别小看底薪,你看那些跳槽去做经理主管的,底薪底一些,人家愿意去吗?所以那些说销售靠提成的纯属忽悠,除非他们的业务很容易成单。
点赞 评论 收藏
分享
jnsytgsyqj...:简历跟测试没关系,你更适合运营
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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