Secret Message ---- (Trie树应用)
Secret Message
- 总时间限制:
- 2000ms
- 内存限制:
- 32768kB
- 描述
-
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 <= 50,000) of
these secret binary messages. He has compiled a list of N (1 <= N <= 50,000) partial codewords
that he thinks the cows are using. Sadly, he only knows the first
c_j (1 <= c_j <= 10,000) bits of codeword j. For each codeword j, he wants to know how many of the intercepted
messages match that codeword (i.e., for codeword j, how many times
does a message and the codeword have the same initial bits). Your
job is to compute this number. The total number of bits in the input (i.e., the sum of the b_i and
the c_j) will not exceed 500,000 - 输入
- INPUT FORMAT:
* Line 1: Two integers: M and N
* Lines 2..M+1: Line i+1 describes intercepted code i with an integer
b_i followed by b_i space-separated 0's and 1's* Lines M+2..M+N+1: Line M+j+1 describes codeword j with an integer
c_j followed by c_j space-separated 0's and 1's - 输出
- * Lines 1..M: Line j: The number of messages that the jth codeword
could match. - 样例输入
-
4 5
3 0 1 0
1 1
3 1 0 0
3 1 1 0
1 0
1 1
2 0 1
5 0 1 0 0 1
2 1 1 - 样例输出
-
1
3
1
1
2 - 提示
- INPUT DETAILS:
Four messages; five codewords.
The intercepted messages start with 010, 1, 100, and 110.
The possible codewords start with 0, 1, 01, 01001, and 11.0 matches only 010: 1 match
1 matches 1, 100, and 110: 3 matches
01 matches only 010: 1 match
01001 matches 010: 1 match
11 matches 1 and 110: 2 matches - 思路: Trie树的应用,注意输入的如果不是有长度一样的,需要特殊处理一下,
- 我是先记录一下第一个点出现的个数,然后找孩子节点,找的过程中减去孩子节点的兄弟节点的个数,
- 就得出了答案。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node{
int v;
node *next[2];
}Trie;
Trie root;
void createTrie(char *str)
{
int len = strlen(str);
Trie *p = &root, *q;
for(int i=0; i<len; ++i)
{
int id = str[i]-'0';
if(p->next[id] == NULL)
{
q = (Trie *)malloc(sizeof(root));
q->v = 1;
for(int j=0; j<2; ++j)
q->next[j] = NULL;
p->next[id] = q;
p = p->next[id];
}
else
{
p->next[id]->v++;
p = p->next[id];
}
}
} int findTrie(char *str)
{
int len = strlen(str);
Trie *p = &root;
Trie *other;
if(len==1){
return p->next[str[0]-'0']->v;
}
int total =p->next[str[0]-'0']->v;
p = p->next[str[0]-'0'];
for(int i=1;i<len;i++){
if(p->next[(str[i]-'0')^1]!=NULL){ // 下一个节点的兄弟节点不空,要减去
total=total-p->next[(str[i]-'0')^1]->v;
}
if(i==len-1){
break;
}
if(p->next[str[i]-'0']!=NULL){ //下一个节点不空,遍历
p=p->next[str[i]-'0'];
}
else if(p->next[str[i]-'0']==NULL){
break;
}
}
return total;
} int main(){
int n,m,i,j,k,ans,num;
char str[50001];
scanf("%d%d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&num);
memset(str,'0',sizeof(str));
for(j=0;j<num;j++){
scanf("%d",&k);
str[j]=k+'0';
}
str[j]='\0';
createTrie(str);
}
for(i=0;i<m;i++){
scanf("%d",&num);
memset(str,'0',sizeof(str));
for(j=0;j<num;j++){
scanf("%d",&k);
str[j]=k+'0';
}
str[j]='\0';
ans = findTrie(str);
printf("%d\n",ans);
}
return 0;
}
Secret Message ---- (Trie树应用)的更多相关文章
- 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]
洛谷传送门,BZOJ传送门 秘密消息Secret Message Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共有M(1≤M≤5 ...
- [USACO08DEC] 秘密消息Secret Message (Trie树)
题目链接 Solution Trie 树水题. 直接将前面所有字符串压入Trie 中. 在查询统计路上所有有单词的地方和最后一个地方以下的单词数即可. Code #include<bits/st ...
- Luogu P2922 [USACO08DEC]秘密消息Secret Message 字典树 Trie树
本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点 ...
- [Usaco2008 Dec]Secret Message 秘密信息
2794: [Usaco2008 Dec]Secret Message 秘密信息 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 7 Solved: 3 ...
- 1590: [Usaco2008 Dec]Secret Message 秘密信息
1590: [Usaco2008 Dec]Secret Message 秘密信息 Time Limit: 5 Sec Memory Limit: 32 MBSubmit: 209 Solved: ...
- [USACO 08DEC]Secret Message
Description Bessie is leading the cows in an attempt to escape! To do this, the cows are sending sec ...
- bzoj 1590: [Usaco2008 Dec]Secret Message 秘密信息
1590: [Usaco2008 Dec]Secret Message 秘密信息 Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共 ...
- 洛谷:P2922 [USACO08DEC]秘密消息(Trie树)
P2922 [USACO08DEC]秘密消息Secret Message 题目链接:https://www.luogu.org/problemnew/show/P2922 题目描述 贝茜正在领导奶牛们 ...
- 「USACO08DEC」「LuoguP2922」秘密消息Secret Message(AC自动机
题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...
随机推荐
- CentOS 编译安装 Redis (实测 笔记 Centos 7.3 + redis 3.2.8)
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...
- python多版本管理工具(pyenv)
在学习和利用python开发的很多情况下,需要多版本的Python并存.此时需要在系统中安装多个Python,但又不能影响系统自带的 Python.pyenv 就是这样一个 Python 版本管理器. ...
- activiti数据库表结构剖析
1.结构设计 1.1. 逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...
- Python-字典与json的转换
#json是字符串,只不过长得像字典 import json user_info='''{"niuhy":1234,"shanbl":44566}''' #js ...
- 认识Python和基础知识
一.第一个Python程序 用vim编写,格式: vim hello.py 然后按 i 进入插入模式开始写代码,注意所有的代码都要用英文输入法,先写括号和引号,再在引号里面写内容(为了避免引号.括号不 ...
- Array.find()和Array.findIndex()
ES6新增的两个方法,根据回调函数返回作为判断依据,按照数组顺序进行遍历,符合条件(为真)时find()返回该值.findIndex()返回下标. 1.语法 arr.find(callback[, t ...
- [Swift]LeetCode537. 复数乘法 | Complex Number Multiplication
Given two strings representing two complex numbers. You need to return a string representing their m ...
- Python数据写入csv格式文件
(只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...
- Saiku设置展示table数据不隐藏空的行数据信息(二十六)
Saiku设置展示table数据不隐藏空的行数据信息 saiku有个 非空的字段 按钮,点击这个后,会自动的把空的行数据信息给隐藏掉,这里我们来设置一下让其行数据不隐藏,为空的就为空. 主要更改两个文 ...
- iOS——调试工具LLDB学习
一.前言 LLDB是个开源的内置于XCode的具有REPL(read-eval-print-loop)特征的Debugger,其可以安装C++或者Python插件.在日常的开发和调试过程中给开发人员带 ...