数据有必要加强
查看原帖
数据有必要加强
370829
_8762楼主2022/7/13 16:43
#include<iostream>
#include<queue>
using namespace std;
const int N=1e6+5;
string s[N],T;
int n,tot=1,ch[N][30],fail[N],flag[N];
void build_trie()
{
  for(int i=1;i<=n;++i)
    {
      int siz=s[i].size(),u=1;
      for(int j=0;j<siz;++j)
        {
          int x=s[i][j]-'a';
          if(!ch[u][x])ch[u][x]=++tot;
          u=ch[u][x];
        }
      ++flag[u];
    }
}
void get_fail()
{
  queue<int> q; q.push(1);
  for(int i=0;i<26;++i)ch[0][i]=1;
  while(!q.empty())
    {
      int u=q.front(); q.pop();
      for(int i=0;i<26;++i)
        {
          int v=ch[u][i],Fail=fail[u];
          if(!v){ch[u][i]=ch[Fail][i];continue;}
          fail[v]=ch[Fail][i]; q.push(v);
        }
    }
}
int query()
{
  int siz=T.size(),u=1,res=0;
  for(int i=0;i<siz;++i)
    {
      int x=T[i]-'a',v=ch[u][x],tmp=v; u=v;
      while(tmp>1&&flag[tmp])res+=flag[tmp],flag[tmp]=0,tmp=fail[tmp];
    }
  return res;
}
int main()
{
  ios::sync_with_stdio(0),cin.tie(0);
  cin>>n; for(int i=1;i<=n;++i)cin>>s[i];
  build_trie(); get_fail(); cin>>T;
  cout<<query()<<'\n';
  return 0;
}
      

这份代码跳fail时条件写错了

以下数据都过不了

3
abc
bcd
c
abc

为什么能过整个数据,两个数据会不会太少了

2022/7/13 16:43
加载中...