AC自動機(病毒侵襲 )

2022-03-05 16:52:54 字數 1157 閱讀 8681

題目大意:中文題目

具體思路:ac自動機模板題,編號的時候注意,是按照給定的id進行編號的。然後輸出的時候注意去重,雖然按道理來講通過last陣列是不會有重複的,但是如果是這種情況,病毒模板aaa,然後給你乙個模板串aaaaa,這樣的話,就肯定會有重複的了,所以需要去重,其次輸出的時候按照公升序輸出。

ac**:

1 #include2 #include3 #include4 #include5 #include

6 #include7 #include8 #include9

using

namespace

std;

10 # define ll long

long

11const

int maxn = 2e5+50000;12

const

int maxm = 1e6+100;13

char str1[200+20],str2[10000+100

];14

int tot,ch[maxn][130

],val[maxn];

15int fail[maxn],last[maxn],sto[500+10],vis[500+10

];16

intans;

17void add(int

t)18

28 val[p]=t;29}

30void

getfail()

3138

while(!q.empty())

3954}55

}56void cal(int

t)5765}

66void

getans()

6781}82

intmain()

8391

getfail();

92int

m;93 scanf("

%d",&m);

94int num=0;95

for(int i=1; i<=m; i++)

96110 printf("\n"

);111

}112 printf("

total: %d\n

",num);

113return0;

114 }

病毒侵襲持續中 AC自動機

傳送門 這裡闡述一下fail陣列的定義 對於 x 與 fail x 兩個點 fail x 到根的字串與從x往上相同字元的字串相同 可以說 fail x 到根的字串是x到根的字串的字尾 所以如果我們發現匹配傳可以匹配到x 那麼fail x fail fail x 都是可以匹配的 另外 如果我們匹配到了...

病毒侵襲持續中(AC自動機)

小t非常感謝大家幫忙解決了他的上乙個問題。然而病毒侵襲持續中。在小t的不懈努力下,他發現了網路中的 萬惡之源 這是乙個龐大的病毒 他有著好多好多的病毒,但是這個 包含的病毒很奇怪,這些病毒的特徵碼很短,而且只包含 英文大寫字元 當然小t好想好想為民除害,但是小t從來不打沒有準備的戰爭。知己知彼,百戰...

hdu2896 AC自動機 病毒侵襲

同樣是一道很裸的ac自動機,統計哪些特徵碼出現在 的原始碼上,匹配成功時不要將val賦值為0,因為後面還有文字串要匹配,另外要注意編號需要從小到大輸出。include include includeusing namespace std const int maxn 100000 10 const ...