題目大意:中文題目
具體思路:ac自動機模板題,編號的時候注意,是按照給定的id進行編號的。然後輸出的時候注意去重,雖然按道理來講通過last陣列是不會有重複的,但是如果是這種情況,病毒模板aaa,然後給你乙個模板串aaaaa,這樣的話,就肯定會有重複的了,所以需要去重,其次輸出的時候按照公升序輸出。
ac**:
1 #include2 #include3 #include4 #include5 #include6 #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 ...