洛谷p2922[USACO08DEC]秘密消息Secret Message
题目:###
题目链接:[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]存储的实际上是包含了“从根节点走到p节点所代表的这条字符串”的所有字符串的总数(包括这条字符串自己)
对于每一条读入的密码,我们把它存储在一个临时数组里,然后在这棵trie树上往下找,记录一个ans,走过每一个节点的时候ans+=end[p]。
走的时候会有两种情况:
- 这条路比这个密码短(即所有符合条件的信息都是这条密码的子集),那么走到尽头就可以了
- 这条路比这个密码长,那么走到这条密码的尽头(这条密码的最后一个字符对应的节点)的时候ans+=size[p](见上面的解释),其余时间ans+=end[p]就可以了
代码不长,我用结构体写的trie树(和上面分析的变量名字是一样的),然后不知道哪里的玄学优化(register?)起了作用好像跑得还有点快(…)
里面的注释自认为比较齐全了
代码:###
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c=='-')f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-'0';
c=getchar();
}
return cnt*f;
}
int n,m,len,tot;//tot:记录节点编号
struct node{
int end;//记录有多少条信息在这个节点完结
int size;//记录有多少条信息过这个节点
int num[2];//记录左右儿子编号
}trie[500005];
int a[50005];//临时数组,用于存放每次添加的信息或密码
inline void insert(int k){
int p=0;
for(register int i=1;i<=k;p=trie[p].num[a[i]],i++){
if(!trie[p].num[a[i]])trie[p].num[a[i]]=++tot;
trie[p].size++;
}
trie[p].size++;
trie[p].end++;
}
inline int ask(int k){
int p=0;
int ans=0;
for(register int i=1;i<=k;p=trie[p].num[a[i]],i++){
int to=trie[p].num[a[i]];
if(!to)break;//如果这条路上没有更长的信息(走不动了)就不搜了
if(i==k)ans+=trie[to].size;//如果这条密码走到头了就把包含它的串的个数都加上(这里包含了和它一样的串)
else
ans+=trie[to].end;//如果没有走到头就把到这个节点完结的串的个数加上
}
return ans;
}
int main(){
m=read();n=read();
for(register int i=1;i<=m;i++){
len=read();
for(register int j=1;j<=len;j++)a[j]=read();
insert(len);
}
for(register int i=1;i<=n;i++){
len=read();
for(register int j=1;j<=len;j++)a[j]=read();
printf("%d\n",ask(len));
}
return 0;
}
洛谷p2922[USACO08DEC]秘密消息Secret Message的更多相关文章
- 洛谷 P2922 [USACO08DEC]秘密消息Secret Message
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
- 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]
洛谷传送门,BZOJ传送门 秘密消息Secret Message Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共有M(1≤M≤5 ...
- 【题解】P2922 [USACO08DEC]秘密消息Secret Message
\(\text{Tags}\) 字典树,统计 题意: 给出两组\(\text{0/1}\)串\(\text{A,B}\),求解\(\text{A}\)中某串是\(\text{B}\)中某串的前缀,和\ ...
- Luogu P2922 [USACO08DEC]秘密消息Secret Message 字典树 Trie树
本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点 ...
- P2922 [USACO08DEC]秘密消息Secret Message
传送门 思路: 还是比较水的(不看题解不看书),用 vis 存字典树上的每个点是多少个单词的前缀,bo 来存每个点是多少个单词的结尾(坑点:会有很多相同的单词,不能只有 bool 来存).统计时:① ...
- 洛谷 2922 BZOJ 1590 [USACO08DEC]秘密消息Secret Message
[题意概述] 给出n个01串组成的字典和m个询问,每次询问某个01串和多少个字典中的串有相同的前缀.(前缀长度是两串中较小的部分) [题解] 直接上Trie树即可.树上每个节点记录两个信息:这个节点有 ...
- [USACO08DEC] 秘密消息Secret Message
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
- [USACO08DEC] 秘密消息Secret Message (Trie树)
题目链接 Solution Trie 树水题. 直接将前面所有字符串压入Trie 中. 在查询统计路上所有有单词的地方和最后一个地方以下的单词数即可. Code #include<bits/st ...
- Luogu2922 [USACO08DEC]秘密消息Secret Message (Trie树)
统计以节点\(i\)结尾的数量与经过的数量 #include <iostream> #include <cstdio> #include <cstring> #in ...
随机推荐
- java-冒泡
一.java冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- EF(Linq)框架使用过程中的小技巧汇总 dbfunctions
这篇博客总结本人在实际项目中遇到的一些关于EF或者Linq的问题,作为以后复习的笔记或者供后来人参考(遇到问题便更新). 目录 技巧1: DbFunctions.TruncateTime()的使用 技 ...
- Android GUI系统学习1:Gralloc
Gralloc模块是从Android Eclair(android 2.1)開始增加的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配).他对上为libui提供服务,为其 ...
- jquery一个比较好的轮播图jQuery.kinMaxShow介绍
kinMaxShow API 可选参数以及详解 kinMaxShow 主参数详解 参数名称 默认值 简单释义 height 500 [整型 (单位:像素)]焦点图高度,必须设置 缺省则启用默认高度 5 ...
- UR#34. 多项式乘法
#34. 多项式乘法 统计 描述 提交 自定义测试 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+ ...
- 基于mqtt协议实现手机位置跟踪
Mqtt协议是物联网领域的一个标准协议,具有轻巧,对设备,带宽要求低,可靠稳定的特点,适合用来实现手机定位跟踪功能. 目前我初步搭建起来了整个可运行的框架,大致为如下思路:1.手机端通过位置服务,获取 ...
- 4.改变eclipse选中文字颜色
window-preferences-general-editors-text editors-annotations-occurrences 和 window-preferences-general ...
- bash_action
https://stackoverflow.com/questions/12076326/how-to-install-maven2-on-redhat-linux #!/bin/bash # Tar ...
- #import @import #include
1.在xcode5以后 ,Replace #import <Cocoa/Cocoa.h> with @import Cocoa; 在这之前 必须手动设置一下才能用. 2.#import 与 ...
- POJ1797 Heavy Transportation —— 最短路变形
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...