社区讨论
蒟蒻的AC被卡掉了
P1184高手之在一起参与者 7已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mk89u50g
- 此快照首次捕获于
- 2026/01/10 20:18 2 个月前
- 此快照最后确认于
- 2026/01/13 21:25 2 个月前
AC做这道题有很多麻烦啊
字符串中间有空格,而且数据量貌似可能会炸掉AC(他没说字符串长度)
蒟蒻实在懒得改代码了,求救(轻点骂)
CPP#include<bits/stdc++.h>
using namespace std;
const int MAXN=9000010;
int n, m;
string s, t;
struct Edge{
int v,la;
};Edge edge[MAXN];
int head[MAXN];
int trie[MAXN][28];
int cnt;
int End[MAXN];
int pass[MAXN];
int fail[MAXN];
int box[MAXN];
bool vis[MAXN];
void trie_insert(int snow,string ins);
void make_fail( );
void add(int u,int v);
void pushup( );
char AC_change(char c);
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i=1 ; i<=n ; i++){
cin >> t;
trie_insert(i,t);
}
for(int i=1 ; i<=m ; i++){
cin >> t;
s+=t;
}
make_fail( );
int len=s.size();
int now=0;
for(int i=0,path ; i<len ; i++){
now=trie[now][s[i]-'A'];
pass[now]++;
}
for(int i=1 ; i<=cnt ; i++){
add(fail[i],i);
}
pushup( );
int ans=0;
for(int i=1 ; i<=n ; i++){
ans+=pass[End[i]];
}
cout << ans << '\n';
return 0;
}
void make_fail( ){
int l=0, r=0;
for(int i=0 ; i<26 ; i++){
if(trie[0][i]!=0) box[r++]=trie[0][i];
}
int now;
while(l<r){
now=box[l++];
for(int i=0 ; i<26 ; i++){
if(trie[now][i]==0)
trie[now][i]=trie[fail[now]][i];
else {
fail[trie[now][i]]=trie[fail[now]][i];
box[r++]=trie[now][i];
}
}
}
return ;
}
void pushup( ){
int r=0; int now=0;
box[r++]=now;
while(r>0){
now=box[r-1];
if(!vis[now]){
vis[now]=true;
for(int i=head[now] ; i ; i=edge[i].la){
box[r++]=edge[i].v;
}
}
else {
r--;
for(int i=head[now] ; i ; i=edge[i].la){
pass[now]+=pass[edge[i].v];
}
}
}
return ;
}
void trie_insert(int snow,string ins){
int now=0;
int len=ins.size();
for(int i=0,path ; i<len ; i++){
path=ins[i]-'A';
if(trie[now][path]==0){
trie[now][path]=++cnt;
}
now=trie[now][path];
}
End[snow]=now;
return ;
}
void add(int u,int v){
edge[v].v=v;
edge[v].la=head[u];
head[u]=v;
return ;
}
char AC_change(char c){
if(c=='#') return 27;
if(c==' ') return 26;
else return c-'A';
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...