题目: 题目链接:[USACO08DEC]秘密消息Secret Message 题意: 给定n条01信息和m条01密码,对于每一条密码A,求所有信息中包含它的信息条数和被它包含的信息条数的和. 分析: 建立一棵trie树,类似于存储26个字母一样存储0和1(每个节点只有两个儿子),然后设包含节点p的信息条数有size[p]条,在节点p结束的信息条数有end[p]条,节点的两个儿子的编号为num[p][0]和num[p][1],然后存储信息. 我们容易知道size[p]存储的实际上是包含了"从根节…
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret binary messages to each other. Ever the clever counterspy, Farmer John has intercepted the first b_i (1 <= b_i <= 10,000) bits of each of M (1 <= M &…
洛谷传送门,BZOJ传送门 秘密消息Secret Message Description     贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息.     信息是二进制的,共有M(1≤M≤50000)条.反间谍能力很强的约翰已经部分拦截了这些信息,知道了第i条二进制信息的前bi(l<bi≤10000)位.他同时知道,奶牛使用N(1≤N≤50000)条密码.但是,他仅仅了解第J条密码的前cj(1≤cj≤10000)位.     对于每条密码J,他想知道有多少截得的信息能够和它匹配.也就是…
\(\text{Tags}\) 字典树,统计 题意: 给出两组\(\text{0/1}\)串\(\text{A,B}\),求解\(\text{A}\)中某串是\(\text{B}\)中某串的前缀,和\(\text{B}\)中某串是\(\text{A}\)中某串的前缀的数量之和. 分析: 对于\(\text{A}\)建立字典树.另外附加两个数组: \(\text{int Son[i]}\)表示节点 \(\text{i}\) 点\(\text{Son[i]}\)儿子. \(\text{int End…
本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点处的子树大小之和. #include <bits/stdc++.h> using namespace std; int top, sta[10010]; int n, m, l, s[10010], max_size; int ch[500010][2], sz[500010], sum[5000…
传送门 思路: 还是比较水的(不看题解不看书),用 vis 存字典树上的每个点是多少个单词的前缀,bo 来存每个点是多少个单词的结尾(坑点:会有很多相同的单词,不能只有 bool 来存).统计时:① 如果匹配串的长度小于单词的长度,ans+= vis:② 如果匹配串的长度≥单词长度,ans+=bo:③ 如果遇到字典树上的节点为空,直接返回. 标程: #include<iostream> #include<cstdio> #include<algorithm> #incl…
[题意概述] 给出n个01串组成的字典和m个询问,每次询问某个01串和多少个字典中的串有相同的前缀.(前缀长度是两串中较小的部分) [题解] 直接上Trie树即可.树上每个节点记录两个信息:这个节点有多少个串经过,这个节点是多少个串的结尾. #include<cstdio> #include<algorithm> #include<cstring> #define LL long long #define rg register #define N 500010 usi…
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret binary messages to each other. Ever the clever counterspy, Farmer John has intercepted the first b_i (1 <= b_i <= 10,000) bits of each of M (1 <= M &…
题目链接 Solution Trie 树水题. 直接将前面所有字符串压入Trie 中. 在查询统计路上所有有单词的地方和最后一个地方以下的单词数即可. Code #include<bits/stdc++.h> using namespace std; const int maxn=500005; int ch[maxn][10]; int num[maxn],pd[maxn]; int n,m,tot; int c[maxn]; int read() { char ch=getchar();…
统计以节点\(i\)结尾的数量与经过的数量 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a…