??RE了??
查看原帖
??RE了??
203083
炎炎龙虾楼主2020/7/29 21:22

这段代码神奇地RE了,编译器报的错我也看不懂……

求助,路过大佬帮个忙看看是哪出错了,谢谢。

//
// Created by admin on 2020/7/29.
//
#include <bits/stdc++.h>
using namespace std;
int n,m,trie[1000005][4],fail[1000005],tot,flag[1000005];
map<char,int>ma;
void insert(string s)
{
    int now=0;
    for(int i=0;i<s.size();i++)
    {
        if(!trie[now][ma[s[i]]])
            trie[now][ma[s[i]]]=++tot;
        now=trie[now][ma[s[i]]];
    }
    flag[now]++;
}
void get_fail()
{
    queue<int>q;
    for(int i=0;i<4;i++)
        q.push(trie[0][i]);
    while(!q.empty())
    {
        int now=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            if(trie[now][i])
            {
                fail[trie[now][i]]=trie[fail[now]][i];
                q.push(trie[now][i]);
            }
            else
                trie[now][i]=trie[fail[now]][i];
        }
    }
}
void ac(string s)
{
    int now=0;
    for(int i=0;i<s.size();i++)
    {
        now=trie[now][ma[s[i]]];
        for(int j=now;j&&flag[j]!=-1;j++)
            flag[j]=-1;
    }
}
int query(string s)
{
    int now=0,ans=0;
    for(int i=0;i<s.size();i++)
    {
        now=trie[now][ma[s[i]]];
        if(flag[now]==-1)
            ans=max(ans,i);
    }
    return ans;
}
int main()
{
    ma['E']=0;ma['S']=1;ma['W']=2;ma['N']=3;
    string t,s[100005];
    cin>>n>>m;
    cin>>t;
    for(int i=1;i<=m;i++)
    {
        cin>>s[i];
        insert(s[i]);
    }
    get_fail();
    ac(t);
    for(int i=1;i<=m;i++)
        cout<<query(s[i])<<endl;
    return 0;
}
2020/7/29 21:22
加载中...