• \(\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[i]}\)表示有\(\text{End[i]}\)个字符串终结于\(\text{i}\)。
    • 对于每个询问,沿着字典树向下走,累加沿途的\(\text{End[i]}\) 。
    • 如果不能匹配,返回累加值。
    • 如果整个询问都匹配成功,还要加上最后一个节点的儿子数量。
  • 参考代码:

      1. #include <stdio.h>
      2. #include <string.h>
      3. #define re register
      4. #define GC getchar()
      5. #define Clean(X,K) memset(X,K,sizeof(X))
      6. int Qread () {
      7. int X = 0 ;
      8. char C = GC ;
      9. while (C > '9' || C < '0') C = GC ;
      10. while (C >='0' && C <='9') {
      11. X = X * 10 + C - '0' ;
      12. C = GC ;
      13. }
      14. return X ;
      15. }
      16. const int Maxn = 500005 , Base = 2;
      17. int T[Maxn][Base] , Tot = 0 , M , N , End[Maxn] , Son[Maxn] , A[Maxn];
      18. void Add (int Now) {
      19. int P = 0 ;
      20. for (re int i = 0 ; i < Now ; ++ i) {
      21. if (!T[P][A[i]]) T[P][A[i]] = ++ Tot;
      22. ++ Son[P] ;
      23. P = T[P][A[i]] ;
      24. }
      25. ++ End[P] ;
      26. }
      27. int Ask (int Now) {
      28. int P = 0 , Ans = 0;
      29. for (re int i = 0 ; i < Now ; ++ i) {
      30. if (!T[P][A[i]]) return Ans ;
      31. P = T[P][A[i]] ;
      32. Ans += End[P] ;
      33. }
      34. return Ans + Son[P] ;
      35. }
      36. int main () {
      37. M = Qread () , N = Qread () ;
      38. Clean(T , 0) , Clean(End , 0) , Clean (Son , 0) ;
      39. for (re int i = 1 ; i <= M; ++ i) {
      40. int Now = Qread () ;
      41. for (re int j = 0 ; j < Now ; ++ j) A[j] = Qread () ;
      42. Add (Now) ;
      43. }
      44. for (re int i = 1 ; i <= N; ++ i) {
      45. int Now = Qread () ;
      46. for (re int j = 0 ; j < Now ; ++ j) A[j] = Qread () ;
      47. printf ("%d\n" , Ask (Now)) ;
      48. }
      49. fclose (stdin) , fclose (stdout) ;
      50. return 0 ;
      51. }

Thanks!

【题解】P2922 [USACO08DEC]秘密消息Secret Message的更多相关文章

  1. 洛谷p2922[USACO08DEC]秘密消息Secret Message

    题目: 题目链接:[USACO08DEC]秘密消息Secret Message 题意: 给定n条01信息和m条01密码,对于每一条密码A,求所有信息中包含它的信息条数和被它包含的信息条数的和. 分析: ...

  2. 洛谷 P2922 [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

    传送门 思路: 还是比较水的(不看题解不看书),用 vis 存字典树上的每个点是多少个单词的前缀,bo 来存每个点是多少个单词的结尾(坑点:会有很多相同的单词,不能只有 bool 来存).统计时:① ...

  4. Luogu P2922 [USACO08DEC]秘密消息Secret Message 字典树 Trie树

    本来想找\(01Trie\)的结果找到了一堆字典树水题...算了算了当水个提交量好了. 直接插入模式串,维护一个\(Trie\)树的子树\(sum\)大小,求解每一个文本串匹配时走过的链上匹配数和终点 ...

  5. 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]

    洛谷传送门,BZOJ传送门 秘密消息Secret Message Description     贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息.     信息是二进制的,共有M(1≤M≤5 ...

  6. [USACO08DEC] 秘密消息Secret Message

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

  7. 洛谷 2922 BZOJ 1590 [USACO08DEC]秘密消息Secret Message

    [题意概述] 给出n个01串组成的字典和m个询问,每次询问某个01串和多少个字典中的串有相同的前缀.(前缀长度是两串中较小的部分) [题解] 直接上Trie树即可.树上每个节点记录两个信息:这个节点有 ...

  8. [USACO08DEC] 秘密消息Secret Message (Trie树)

    题目链接 Solution Trie 树水题. 直接将前面所有字符串压入Trie 中. 在查询统计路上所有有单词的地方和最后一个地方以下的单词数即可. Code #include<bits/st ...

  9. Luogu2922 [USACO08DEC]秘密消息Secret Message (Trie树)

    统计以节点\(i\)结尾的数量与经过的数量 #include <iostream> #include <cstdio> #include <cstring> #in ...

随机推荐

  1. requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregation', boolean values must be either 'true' or 'false

    requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregati ...

  2. 【死磕Java并发】-----Java内存模型之happens-before

    在上篇博客([死磕Java并发]-–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题.那么我们正确使用同步.锁的情况下 ...

  3. ThinkPHP5.1 + tufanbarisyildirim 解析apk

    摘要 对于apk,我可以说只会安装,并不知道其中有什么内容需要记录下来.这次公司做一个关于电视机顶盒的项目.对于这个陌生的项目,刚开始真是一脸懵逼,完全不知道如何下手. 因为这类的项目完全没有接触过, ...

  4. 集群环境下Shiro Session的管理

    问题引入 紧接上篇连接 在多台tomcat集群中,shiro管理的session需要放在Redis中,我们只需要增加redisSessionDAO的配置就行 <!-- 定义会话管理器的操作 表示 ...

  5. [Abp vNext 源码分析] - 文章目录

    一.简要介绍 ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 2 月 18 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.16.0 ,但还属于预览版 ...

  6. Dubbo简介

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  7. BitmapUtil【缩放bitmap以及将bitmap保存成图片到SD卡中】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于缩放bitmap以及将bitmap保存成图片到SD卡中 效果图 代码分析 bitmapZoomByHeight(Bitmap s ...

  8. KnockOut绑定之Click绑定

    example(click绑定) Click绑定对DOM元素添加一个函数,当DOM元素被点击的时候调用.在button,input 或者a标签中常用,但其实他适用于任何可见的DOM元素. 每当你点击b ...

  9. JavaScript一看就懂(3)数组

    定义数组 var a = [1, 2, 3]; typeof a; //"object", 数组是对象 a.length; //数组长度 相关操作 a[0]; //下标访问 a.p ...

  10. [开发技巧]·HTML检测输入已完成自动填写下一个内容

    [开发技巧]·HTML检测输入已完成自动填写下一个内容 个人网站 --> http://www.yansongsong.cn 在上一个博客中简易实现检测输入已完成,我们实现了检测输入已完成,现在 ...