3228专题

zoj 3228 ac自动机

给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。 Sample Input ab 2 0 ab 1 ab abababac 2 0 aba 1 aba abcdefghijklmnopqrstuvwxyz 3 0 abc 1 def 1 jmn Sample Output Case 1 1 1 Case 2

zoj-3228 Searching the String AC自动机

用一个val数组记录每一个单词结尾对应的位置,pos数组记录某个节点的深度(其实就是记录单词的长度的),然后用一个op数组记录一下每一个单词对应的询问方式,主要是查询分为了可重叠和不可重叠,不可重叠的话就是用一个last数组来记录查询过程中上次到达该单词的位置last[now]=i,如果再经过now点满足i-last[now]>=pos[now]就满足不重叠。 #include<stdio.h>