社区讨论
求调教
P3808AC 自动机(简单版)参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhqm5gsl
- 此快照首次捕获于
- 2025/11/09 02:23 3 个月前
- 此快照最后确认于
- 2025/11/16 14:07 3 个月前
大佬求条
CPP#include<bits/stdc++.h>
using namespace std;
long long n, ans, cnt, vis[1000005], x[1000005], a[1000005][26];
string s, t;
void f(string s){
long long pos=0;
for(auto i:s){
if(!a[pos][i-'a']) a[pos][i-'a']=++cnt;
pos=a[pos][i-'a'];
}
vis[pos]++;
}
void bfs(){
queue<long long> q;
for(long long i=0;i<26;i++){
if(a[0][i]) q.push(a[0][i]);
x[a[0][i]]=0;
}
while(q.size()){
auto t=q.front();
q.pop();
for(long long i=0;i<26;i++){
if(a[t][i]){
x[a[t][i]]=a[x[t]][i];
q.push(a[t][i]);
}
else a[t][i]=a[x[t]][i];
}
}
}
int main(){
// freopen("P3808_2.in", "r", stdin);
// freopen("P3808_2.ans", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(long long i=1;i<=n;i++){
cin>>s;
f(s);
}
cin>>t;
long long c=0;
for(long long i=0;i<t.size();i++){
c=a[c][t[i]-'a'];
for(long long j=c;j&&vis[j]!=-1;j=x[j]){
ans+=vis[j], vis[j]=-1;
}
}
cout<<ans;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...