2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)

Posted herlo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)相关的知识,希望对你有一定的参考价值。

?? ?? ??

题意:一个字符串s,t个字符串p,判断p是不是s的子序列

预处理出对于字符串s,每个位置i之后第一个字母x的位置,匹配子序列的时候就相当于在母串上往后跳,如果跳到母串末尾,子序列还没有结束,匹配失败。

然而!超时了QAQ,只能过八组样例,网上也只能找到过九组的,,,希望有哪位大神路过指点一下了

int tag[33],nxt[MAXN][30];
char s[MAXN],p[MAXN];
void init()
{
    int n=strlen(s);
    for(int j=0;j<='z'-'a';++j) tag[j]=n;
    for(int i=n-1;i>=0;--i)
    {
        rep(j,'z'-'a'+1) nxt[i][j]=tag[j];
        tag[s[i]-'a']=i;
    }
}
signed main()
{
    scanf("%s",s);init();
    int t;scanf("%d",&t);
    while(t--)
    {
        scanf("%s",p);
        int k=0,flag=1,n=strlen(p);
        rep(i,n)
        {
            if(i==0) k=tag[p[i]-'a'];
            else k=nxt[k][p[i]-'a'];
            if(k==(int)strlen(s))  {flag=0;break;}
        }
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}

以上是关于2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)的主要内容,如果未能解决你的问题,请参考以下文章

2019icpc南昌网络赛

2019南昌icpc网络赛 I题 分块套BIT

ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval

2019 南昌网络赛icpc I题 cdq分治或分块

2019 ICPC 南昌网络赛 - Max answer (区间和,区间最值)

2019 ICPC 南昌网络赛 - Subsequence (子串判断,预处理,超时)