zoukankan      html  css  js  c++  java
  • 【洛谷 SP8093】 JZPGYZ

    题目链接
    广义sam。。

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int MAXN = 1000010;
    struct SAM{
        int ch[26];
        int len, fa;
    }sam[MAXN << 1];
    int las = 1, cnt = 1, v[MAXN << 1], sz[MAXN << 1];
    int len[MAXN], tot, n, m;
    inline void add(int c){
        int p = las; int np = las = ++cnt;
        sam[np].len = sam[p].len + 1;
        for(; p && !sam[p].ch[c]; p = sam[p].fa) sam[p].ch[c] = np;
        if(!p) sam[np].fa = 1;
        else{
            int q = sam[p].ch[c];
            if(sam[q].len == sam[p].len + 1) sam[np].fa = q;
            else{
                int nq = ++cnt; sam[nq] = sam[q];
                sam[nq].len = sam[p].len + 1;
                sam[q].fa = sam[np].fa = nq;
                for(; p && sam[p].ch[c] == q; p = sam[p].fa) sam[p].ch[c] = nq;
            }
        }
    }
    char a[MAXN];
    void update(int x, int y){
        for(; x && v[x] != y; x = sam[x].fa){
            v[x] = y; ++sz[x];
        }
    }
    int ans;
    int main(){
        scanf("%d%d", &n, &m); getchar();
        for(int i = 1; i <= n; ++i){
            las = 1;
            char ch;
            while((ch = getchar()) != '
    ') add(a[++tot] = ch - 'a'), ++len[i];
        }tot = 0;
        for(int i = 1; i <= n; ++i)
            for(int j = 1, x = 1; j <= len[i]; ++j)
                update(x = sam[x].ch[a[++tot]], i);
        for(int i = 1; i <= m; ++i){
            ans = 0; int p = 1;
            scanf("%s", a);
            int len = strlen(a);
            for(int j = 0; j < len; ++j)
                if(sam[p].ch[a[j] - 'a'])
                    p = sam[p].ch[a[j] - 'a'];
                else{
                    ans = -1;
                    break;
                }
            if(ans) ans = 0;
            else ans = sz[p];
            printf("%d
    ", ans);
        }
        return 0;
    }
    
    
  • 相关阅读:
    Unity中获取移动设备GPS信息
    Unity打包APP控制顶部状态栏
    Hololens概览
    webdriver中的定位模拟及实例
    selenium等待机制
    seleniumChrom无头浏览器
    selenium规避网站监测
    百度api识别验证码登录
    Pyecharts-数据可视化模块
    Selenium-浏览器兼容性测试自动化
  • 原文地址:https://www.cnblogs.com/Qihoo360/p/11030049.html
Copyright © 2011-2022 走看看