此題是在簡單版的ac自動機基礎上完成,直接附上**
ac**:
#includeusingnamespace
std;
typedef
long
long
ll;const
int maxn=1e6+5
;string
t[maxn],s[maxn];
struct
tree
dfa[maxn]; //
字典樹int cnt=0
;struct
result
ans[maxn];
//記錄單詞出現次數
bool
cmp(result a,result b)
void clean(int
x)void build(string s,int
num)
now=dfa[now].son[s[i]-'
a']; //
向下構造
} dfa[now].num=num;//
標記單詞的結尾
}void get_fail() //
構造fail指標
}while(!q.empty())
else
//如果不存在這個節點}}
}void query(strings)}
intmain()
dfa[
0].fail=0; //
結束標誌
get_fail();//
求出失配指標
cin>>s[0]; //
文字串 query(s[0
]); sort(ans+1,ans+n+1
,cmp);
printf(
"%d\n
",ans[1
].times);
cout
<< s[ans[1].pos]
}return0;
}
洛谷P3796 模板 AC自動機(加強版)
題目描述 有個由小寫字母組成的模式串以及乙個文字串。每個模式串可能會在文字串中出現多次。你需要找出哪些模式串在文字串中出現的次數最多。輸入輸出格式 輸入格式 輸入含多組資料。每組資料的第一行為乙個正整數,表示共有個模式串,接下去行,每行乙個長度小於等於的模式串。下一行是乙個長度小於等於的文字串。輸入...
洛谷P3796 模板 AC自動機(加強版)
有 nn 個由小寫字母組成的模式串以及乙個文字串 tt 每個模式串可能會在文字串 現多次。你需要找出哪些模式串在文字串 tt 現的次數最多。輸入格式 輸入含多組資料。每組資料的第一行為乙個正整數 nn 表示共有 nn 個模式串,1 leq n leq 1501 n 150 接下去 nn 行,每行乙個...
洛谷 P3796 模板 AC自動機(加強版)
題目描述 有 nn 個由小寫字母組成的模式串以及乙個文字串 tt。每個模式串可能會在文字串 現多次。你需要找出哪些模式串在文字串 tt 現的次數最多。輸入格式 輸入含多組資料。保證輸入資料不超過 5050 組。每組資料的第一行為乙個正整數 nn,表示共有 nn 個模式串,1 leq n leq 15...