luogu P3796 模板 AC自動機(加強版)

2022-05-09 13:57:08 字數 1910 閱讀 9816

嘟嘟嘟

這個和某谷的ac自動機模板簡單版差不多。

但還是要注意幾點的:

1.這個是統計出現次數,而不是是否出現,所以在查詢的時候加上這個節點的val後,不能把val標記為-1。那麼也就可以說查詢的時間複雜度能比簡單版的稍微第一慢一點。

2.考慮k個一樣的模式串:剛開始我想的是每乙個節點開乙個vector,記錄這裡是第幾個模式串。但其實沒有這個必要,對於相同的模式串,我們只用記錄任意乙個就行,反而在出現次數上要都加上。因為如果主串中存在這些相同的模式串,那麼出現次數應該是出現次數 * k。輸出的時候如果是這些串最多,那麼都應該把這些輸出。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include12

using

namespace

std;

13#define enter puts("")

14#define space putchar(' ')

15#define mem(a, x) memset(a, x, sizeof(a))

16#define in inline

17#define fore(i, x, y) for(int i = head[x], y; ~i && (y = e[i].to); i = e[i].nxt)

18 typedef long

long

ll;19 typedef double

db;20

const

int inf = 0x3f3f3f3f;21

const db eps = 1e-8;22

const

int maxs = 1e6 + 5;23

const

int maxn = 155;24

const

int maxn = 1.1e4 + 5;25

in ll read()

2634 in void

write(ll x)

3540 in void

myfile()

4147

48int

n;49

char s[maxs], s2[maxn][100

];50

51int

sum[maxn];

52int ch[maxn][26], val[maxn], pos[maxn], f[maxn], cnt = 0

;53 in int c(char c)

54 in void clear(int x)

55 in void insert(int id, char*s)

5664 val[now]++, pos[now] =id;65}

66 in void

build()

6778}79

}80 in void query(char*s)

8189}90

91 in void

init()

9295

96int

main()

97107

build();

108 scanf("%s"

, s);

109query(s);

110int max = -1

;111

for(int i = 1; i <= n; ++i) max =max(max, sum[i]);

112write(max), enter;

113for(int i = 1; i <= n; ++i) if(sum[i] ==max) puts(s2[i]);

114}

115return0;

116 }

AC自動機模板 洛谷3796

ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...

P3796 模板 AC自動機

傳送門 ac自動機的模板 簡單的理解就是字典樹上的kmp 注意陣列不要開太大 不然每次memset耗時太多 有乙個小優化 每次走 fail 邊找匹配時只有一些會更新答案 那麼就可以把沒用的fail邊壓縮掉 設 g x 表示從 x 點一直走 fail 邊,走到的第乙個有結束標記的點 那麼找匹配時就只有...

AC自動機模板3 洛谷3796

ac自動機的第三個模板 其實,個人覺得,目前我寫的這三個不同的模板完全是可以合併在一起求解的。只是,在這兩個無關聯的oj上,同乙個ac自動機都可以完成的問題被拆成了三道題而已。因此,只需要略加修改即可解決這道題。具體題目請上洛谷檢視 include include include include i...