[BZOJ1590] [Usaco2008 Dec]Secret Message 秘密信息(字典树)
Posted 蒟蒻zht的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BZOJ1590] [Usaco2008 Dec]Secret Message 秘密信息(字典树)相关的知识,希望对你有一定的参考价值。
看到前缀就要想到字典树!
看到前缀就要想到字典树!
看到前缀就要想到字典树!
#include <cstdio> #include <iostream> #define N 500001 int n, m, k, cnt; int a[N], val[N], num[N], next[N][2]; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == ‘-‘) f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - ‘0‘; return x * f; } inline void insert() { int i, now = 0; for(i = 1; i <= k; i++) { if(!next[now][a[i]]) next[now][a[i]] = ++cnt; now = next[now][a[i]]; num[now]++; } val[now]++; } inline int query() { int i, now = 0, ans = 0; for(i = 1; i <= k; i++) { if(!next[now][a[i]]) return ans; now = next[now][a[i]]; ans += val[now]; } return ans + num[now] - val[now]; } int main() { int i, j; n = read(); m = read(); for(i = 1; i <= n; i++) { k = read(); for(j = 1; j <= k; j++) a[j] = read(); insert(); } for(i = 1; i <= m; i++) { k = read(); for(j = 1; j <= k; j++) a[j] = read(); printf("%d\n", query()); } return 0; }
以上是关于[BZOJ1590] [Usaco2008 Dec]Secret Message 秘密信息(字典树)的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]BZOJ计划
[BZOJ1590] [Usaco2008 Dec]Secret Message 秘密信息(字典树)
BZOJ1590: [Usaco2008 Dec]Secret Message 秘密信息
BZOJ1590: [Usaco2008 Dec]Secret Message 秘密信息