判斷乙個串是否在至少k個字串裡面的方法後3473一樣,每新增乙個新的字元就沿fail鏈更新。
剩下的問題就只是剩下了,每增加乙個新的字元,共多出現了多少個新的字串,如果不要求重複,那麼很顯然就是len[u]-len[fail[u]],這裡重複的字串也需要加入答案所以只用沿fail鏈dfs一下,sum[u]=fail鏈上所有的壞和就好了
#include#include#include#define maxn 200021
#include#define ll long long
using namespace std;
int len[maxn],n,k,son[maxn][26],sz[maxn];
ll sum[maxn];
int fail[maxn],now,bg[maxn],bl[maxn],last=1,tot=1,rt=1;
char s[maxn];
vectorg[maxn],e[maxn];
void insert(int c)
} g[now].push_back(np);
while(np&&bl[np]!=now)
}void dfs(int u)sum[1]=0;
dfs(1);
for(int i=1;i<=n;i++){
ll ans=0;
for(int u,j=0;j
bzoj 3277 串 (廣義字尾自動機)
time limit 10 sec memory limit 128 mb submit 357 solved 144 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中至少k個字串的子串 注意包括本身 第一行...
bzoj3277 串 廣義字尾自動機
廣義字尾自動機板子題 廣義字尾自動機的建圖方法大概就是在trie上按bfs序來建圖,這裡的last節點應該是trie上父親的last節點 然後這裡按題目要求記right為在至少k個串走過的方案,具體建法就是先把每個串跑一遍然後在parent樹上更新所有父親節點的答案,注意不要判重。然後掃一遍所有節點...
BZOJ3277 串 廣義字尾自動機
time limit 10 sec memory limit 128 mb submit 1196 solved 478 submit status discuss 字串是oi界常考的問題。現在給定你n個字串,詢問每個字串有多少子串 不包括空串 是所有n個字串中 至少k個字串的子串 注意包括本身 第...