P2922 [USACO08DEC]秘密消息Secret Message

题目描述

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.

Memory Limit: 32MB

POINTS: 270

贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息.

信息是二进制的,共有M(1≤M≤50000)条.反间谍能力很强的约翰已经部分拦截了这些信息,知道了第i条二进制信息的前bi(l《bi≤10000)位.他同时知道,奶牛使用N(1≤N≤50000)条密码.但是,他仅仅了解第J条密码的前cj(1≤cj≤10000)位.

对于每条密码J,他想知道有多少截得的信息能够和它匹配.也就是说,有多少信息和这条密码有着相同的前缀.当然,这个前缀长度必须等于密码和那条信息长度的较小者.

在输入文件中,位的总数(即∑Bi+∑Ci)不会超过500000.

输入输出格式

输入格式:

  • 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.

输入输出样例

输入样例#1:

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:

1
3
1
1
2

说明

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

典型的字典树统计题。

一边建树,一边在这串数列中走过的路径中的sum+1,sum代表有sum个单词经过这个节点。

end代表有end个单词在这个节点终结。

然后读入待查询的信息,有两种情况:一是该信息全部走完,二是再往下走没有与该信息相符的节点了。

第一种情况,当前的答案要减去当前节点的end值再加上当前节点的sum值(想一想,为什么)。

第二种情况,直接输出答案。

显然比待查询的信息长的信息,如果与待查询信息有相同前缀的话,一定会经过待查询信息终结的节点。

如果待查询信息无法终结,说明没有比该信息长且前缀是该信息的信息,所以不能加上sum。

如果信息终结,那么当前节点的sum值所包含的信息一定与其有相同前缀,但sum所包含的信息有可能刚好在该节点终结,

所以要减去end值。

 1 /*
 2     典型字典树统计
 3     把字母换成01串
 4 */
 5 #include <ctype.h>
 6 #include <cstdio>
 7
 8 const int MAXN=500010;
 9
10 int n,m,tot;
11
12 int t[MAXN][3],p[MAXN],sum[MAXN],end[MAXN];
13
14 inline void read(int&x) {
15     int f=1;register char c=getchar();
16     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
17     for(;isdigit(c);x=x*10+c-48,c=getchar());
18     x=x*f;
19 }
20
21 inline void build() {
22     int now=0;
23     for(int i=1;i<=p[0];++i) {
24         if(!t[now][p[i]]) t[now][p[i]]=++tot;
25         now=t[now][p[i]];
26         ++sum[now];
27     }
28     ++end[now];
29     return;
30 }
31
32 inline void find() {
33     int ans=0,now=0;
34     bool f=true;
35     for(int i=1;i<=p[0];++i) {
36         if(t[now][p[i]]) now=t[now][p[i]];
37         else {
38             f=false;
39             break;
40         }
41         ans+=end[now];
42     }
43     if(!f) printf("%d\n",ans);
44     else printf("%d\n",ans+sum[now]-end[now]);
45     return;
46 }
47
48 int hh() {
49     read(m);read(n);
50     for(int i=1;i<=m;++i)  {
51         read(p[0]);
52         for(int i=1;i<=p[0];++i) read(p[i]);
53         build();
54     }
55     for(int i=1;i<=n;++i) {
56         read(p[0]);
57         for(int i=1;i<=p[0];++i) read(p[i]);
58         find();
59     }
60     return 0;
61 }
62
63 int sb=hh();
64 int main() {;}

代码

转载于:https://www.cnblogs.com/whistle13326/p/7400706.html

P2922 [USACO08DEC]秘密消息Secret Message相关推荐

  1. 【代码超详解】洛谷 P2922 [USACO08DEC]秘密消息Secret Message

    一.题目描述 题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending sec ...

  2. [Trie] Luogu P2992 [USACO08DEC]秘密消息Secret Message

    题目描述 Bessie is leading the cows in an attempt to escape! To do this, the cows are sending secret bin ...

  3. P2922-[USACO08DEC]秘密消息Secret Message【Trie,字符串】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2922 题目大意 给n个01串,用m个01串匹配,如果n是m的前缀或 ...

  4. 洛谷 P3102 [USACO14FEB]秘密代码Secret Code

    P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...

  5. WCF后续之旅(16): 消息是如何分发到Endpoint的--消息筛选(Message Filter)

    在介绍终结点的ListenUriMode时,我们提到了两个特殊的对象ChannelDispatcher和ChannelListener.这两个对象在整个WCF的消息分发系统中具有重要的地位,在这节里, ...

  6. Android安全加密:消息摘要Message Digest

    Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名 ...

  7. RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)

    2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...

  8. Android的消息机制: Message/MessageQueue/Handler/Looper

    概览 * Message:消息.消息里面可包含简单数据.Object和Bundle,还可以包含一个Runnable(实际上可看做回调). * MessageQueue:消息队列,供Looper线程消费 ...

  9. pythonmessage用法_django 消息框架 message使用详解

    前言 在网页应用中,我们经常需要在处理完表单或其它类型的用户输入后,显示一个通知信息给用户. 对于这个需求,Django提供了基于Cookie或者会话的消息框架messages,无论是匿名用户还是认证 ...

  10. 【Android开发】消息处理类(Handler)与消息类(Message)介绍

    一.消息处理类(Handler)简介 消息处理类Handler允许发送和处理Message或Runnable对象到其所在线程的MessageQueue中.Handler主要有一下两个作用: 1.将Me ...

最新文章

  1. 计算机基础理论汇编,计算机基础知识:计算机中的汇编语言
  2. CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5
  3. 什么是python的第三方库_python学习(十九)常见的第三方库
  4. python网页表格读取_是否可以读取网页html表格数据?
  5. 中科大 计算机网络11 应用层原理
  6. 软件开发的生命周期描述
  7. mysql不带加密模式jar包_Spring boot jar包加密(防止放在客户端反编译)
  8. linux中ONBOOT=yes
  9. [洛谷P4838]P哥破解密码
  10. 网易严选(html+css+js)
  11. win7开机后桌面变成黑色,此window副本不是正版
  12. python自测单词软件_还在用背单词App?使用Python开发英语单词自测工具,助你逆袭单词王!...
  13. css绘制梯形图形,及显示矩形图片
  14. Linux进程间通信编程
  15. 我是这样克服拖延症的,你也可以试试
  16. CRC16算法是什么
  17. LCD驱动源码分析(s3cfb.c)
  18. new Proxy()代理
  19. 逆向笔记 | 破解极域学生端密码并实现窗口化屏幕广播
  20. sq-接口项目-外卖系统

热门文章

  1. 50余家光伏企业竞标混战:0.52元最低价仍有利润!
  2. Freemarker 最简单的例子程序
  3. Solidworks如何绘制标准螺纹线
  4. 【红顶商人胡雪岩】-- 读完一点小感
  5. 【聚会】2014圣诞北京版主聚餐-淘虾记“光辉岁月”版
  6. 数字证书(Certificate)
  7. Tomcat下使用 telnet命令连接
  8. 7 款神秘的开源中间件!
  9. 不想一直做码农的请进~
  10. [经典]技术面试宝典: 很全面的算法和数据结构知识(含代码)