單詞統計 AC自動機

2021-06-14 11:44:06 字數 1191 閱讀 7628

1118.單詞統計

time limit: 1000 ms    memory limit: 32768 kb

total submission(s): 12    accepted submission(s): 1

description

給定乙個字串和若干個單詞,統計這些單詞在這個字串中出現的次數。

input

第一行為乙個整數n(1 <= n <= 10000),表示單詞的數量,之後n行每行乙個單詞,單詞只由小寫字母組成,最大長度為50。最後一行為乙個字串,也只由小寫字母組成,最大長度1000000。

output

一行n個用乙個空格隔開的整數,表示每個單詞出現的次數。

sample input

5aab

baaba

babaababa

sample output

4 2 2 2 1

#include#include#includeusing namespace std;

struct node

}*q[500001];

char keyword[51];

char str[1000001];

int head,tail;

int num=0;

int cnt[10001]=;

void insert(char *str,node *root)

if(p->count==0)

else

cnt[++num]=-p->count1;

}void build(node *root)

p=p->fail;

}if(p==null)

temp->next[i]->fail=root;

}q[head++]=temp->next[i];}}

}}

int query(node *root)

i++;

}return 0;

}int main()

build(root);

scanf("%s",str);

query(root);

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

if(cnt[i]<0)

cnt[i]=cnt[-cnt[i]];

for(int i=1;i

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

BZOJ 3172 單詞 (AC自動機)

這道題是個裸的ac自動機,但是我還是調了很久qaq。首先如果我們直接用每個單詞來匹配的,時間不是很理想。這道題要用到ac自動機的衍生物 fail樹 我也是做這道題才知道有這個東西 fail樹有這麼乙個結論 乙個字串出現的次數等於以它為根節點的fail樹的子樹中所有節點的cnt的和。根據這個結論,我們...

bzoj3172 單詞 AC自動機

感覺以前寫過。bzoj上不去我也不知道 跑一遍ac自動機,每乙個節點儲存一下屬於多少字串,為它的權值。然後乙個節點表示的字串在整個字典中出現的次數相當於其在fail樹中的子樹的權值的和。ac自動機不要寫掛就好了。ac 如下 include include include define n 11000...