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
5aabbaaba
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...