【HDOJ 5384】Danganronpa
生活随笔
收集整理的這篇文章主要介紹了
【HDOJ 5384】Danganronpa
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【HDOJ 5384】Danganronpa
AC自己主動機。
。。
當時感覺用字典樹 標神也往自己主動機想來著。。手太生加上時間緊迫也沒敲……回來一看題解什么AB同一時候建自己主動機。。。頓時愣了 什么叫同一時候建= =問了問財神說普通自己主動機。
。
。B串單建 立刻瘋了……這不就是模板題么。。
。 B串建自己主動機 A串枚舉查詢 寫完興沖沖1T……立刻想法優化 建fail時壓縮一下 查詢時直接累計 不再循環找fail 171ms。。
。第二個自己主動機的題。。距上次蠻久了 這次一復習 感覺印象差點兒相同有了
代碼(模板)例如以下:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <queue>using namespace std;typedef struct Node {int ch[26],cnt,fail; }Node;Node tr[2600011]; char a[100001][10002]; int tp;int SetNode() {memset(tr[tp].ch,-1,sizeof(tr[tp].ch));tr[tp].cnt = 0;return tp++; }void Add(int site,char *str) {int i,k;for(i = 0; str[i]; ++i){k = tr[site].ch[str[i] - 'a'];if(k == -1) tr[site].ch[str[i] - 'a'] = k = SetNode();site = k;}tr[site].cnt++; }void Build_AC(int site) {queue <int> q;q.push(site);int i,tmp;while(!q.empty()){site = q.front();q.pop();for(i = 0; i < 26; ++i){if(tr[site].ch[i] == -1) continue;if(!site) tr[tr[site].ch[i]].fail = 0;else{tmp = tr[site].fail;while(tmp && tr[tmp].ch[i] == -1) tmp = tr[tmp].fail;tr[tr[site].ch[i]].fail = (tr[tmp].ch[i] == -1)? tmp: tr[tmp].ch[i];if(tr[tmp].ch[i] != -1) ///壓縮計數器tr[tr[site].ch[i]].cnt += tr[tr[tmp].ch[i]].cnt;}q.push(tr[site].ch[i]);}} }int Search(int site,char *str) {int i,k,ans = 0;for(i = 0; str[i]; ++i){k = str[i] - 'a';while(site && tr[site].ch[k] == -1) site = tr[site].fail;if(tr[site].ch[k] != -1) site = tr[site].ch[k];ans += tr[site].cnt;}return ans; }int main() {int t,na,nb,i;char str[100005];scanf("%d",&t);while(t--){scanf("%d %d",&na,&nb);tp = 0;SetNode();for(i = 0; i < na; ++i){scanf("%s",a[i]);}while(nb--){scanf("%s",str);Add(0,str);}Build_AC(0);for(i = 0; i < na; ++i){printf("%d\n",Search(0,a[i]));}}return 0; }轉載于:https://www.cnblogs.com/yutingliuyl/p/7039236.html
總結
以上是生活随笔為你收集整理的【HDOJ 5384】Danganronpa的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 心静如水,安之若素是什么意思
- 下一篇: JVM 调优手段