字典樹 原理:按照每個根向下發散 形成一棵 樹
這個題 需要在每乙個字母處都做統計 (求字首單詞)
開乙個 二維陣列和ant來 模擬樹 root開始為0 作為 起點 t=str[i]-『a』; 作為分支
關鍵就是 ant 這是形成樹的關鍵 ant用來區分每乙個節點 這樣二維陣列 tree才能
真正構建完成(很神奇…)
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const ll maxn=
1e6+10;
int tree[maxn][26
]; 構建父子關係
int cnt=0;
//節點區分
int root;
int sum[maxn]=;
//統計陣列
void
insert
(char s)
}int
find
(char s)
return sum[root];}
intmain()
while
(cin>>ask)
return0;
}
依舊是字典樹 按照 0/1建樹 不過是從尾部往前找 (因為2進製)
查詢時 因為 求異或最大值所以 要求二進位制對應每位應該不同
(建樹 陣列 應該開 要求的樣例*13+ 不知道怎麼求得的13+)我直接乘了32
具體解析 嵌入**中了
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const ll maxn=
1e5+7;
int a[maxn]
,b[maxn]
;int tree[maxn*32]
[2];
//構建父子關係
int cnt;
//節點區分
int root;
void
init()
void
insert
(int x)
}int
find
(int y)
return ans;
}int
main()
for(
int i=
0;i)scanf
("%d"
,&b[i]);
printf
("case #%d:\n"
,j);
for(
int i=
0;ireturn0;
}
#include
#include
#include
#include
using
namespace std;
const
int maxx=
1e6+10;
// 建樹節點個數
const
int maxn=
500005
;//建樹 大小
struct statep[maxn]
;//建樹結構體大小
int size;
//節點區分引數
void
init()
size=1;
// 首節點 復賦值
}queue<
int> q;
//構建fail佇列建立
void
insert
(char
*s) p[now]
.cnt++
;//統計 單詞 出現的次數
}void
build()
v=p[v]
.fail;
//指向自己的失敗指向 }if
(v==-1
)//為祖先
p[p[u]
.next[i]
].fail=0;
} q.
push
(p[u]
.next[i]);
//送入先的節點(子類)作為父類 構建fail }}
}}intget
(int u)
return res;
}int
match
(char
*s)if
(p[now]
.cnt)
//是都為樹分支結尾(單詞最後乙個單詞節點)
res+
=get
(now)
;//次數累加到總計
}return res;
}/*當時自己看的這段很懵逼 ****
為啥沒有乙個乙個和字串
比較 ...現在想想,笑哭 ```
1.其時有比較操作請看 for()迴圈的第乙個 if()呢就是
比較操作
2.而後來的else 是fail的跳轉 作用就是用來優化比較操作
這一點和 kmp非常相似
*/char s[maxx]
;//建立單詞陣列
intmain()
scanf
("%s"
,s);
build()
;//樹中各節點 用fail串聯 的建立
printf
("%d\n"
,match
(s));}
return0;
}
字典樹哇 AC自動機哇
字典樹 原理 按照每個根向下發散 形成一棵 樹 這個題 需要在每乙個字母處都做統計 求字首單詞 開乙個 二維陣列和ant來 模擬樹 root開始為0 作為 起點 t str i a 作為分支 關鍵就是 ant 這是形成樹的關鍵 ant用來區分每乙個節點 這樣二維陣列 tree才能 真正構建完成 很神...
AC自動機(KMP 字典樹)
ac自動機 kmp 字典樹 題目 輸入n個串,判斷有多少個搜尋串的子串 in out 1 47a ababc abcd abcde abcdef abcdefg abcd includeusing namespace std char str 1000000 100 struct node root...
字典樹問題與AC自動機
利用字串的公共字首來避免無謂的字串比較,降低查詢時間。字典樹節點 每個節點對應乙個最大可儲存字元陣列。假設字典只存26個小寫英文本母,那麼每個節點下應該有乙個長度為最大26的陣列。換言說,可存的元素型別越多,單個節點占用記憶體越大。如果用字典樹儲存漢字,那麼每個節點必須為數千個常用漢字開闢乙個陣列作...