题意:
     给你一堆商品的名字,然后给你一些条形码,问你这些条形码转换成的字符串的
前缀在商品中出现的个数,条形码的每个字母是八个二进制数字,有两种数,大的是小的2倍,小的是0,大的是1,这里面的吴超是 *0.95---*1.05之间。

思路:
      显然是字典树,字典树处理前缀出现次数,先把所有字符串加到树里面,然后我

们想办法吧这个二进制数字翻译成字母,其实很简单,先找到一个最大的,然后枚举每一个 int(max * 1.05 / (num[i] * 0.95)) ,如果他是1,那么当前这位是1,否则当前这位是0 ,然后转换成十进制。然后直接在树上查找就行了。


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Tree
{Tree *next[26];int v;
}Tree;Tree root;void Buid_Tree(char *str)
{int len = strlen(str);Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';if(p -> next[id] == NULL){q = (Tree *)malloc(sizeof(root));q -> v = 1;for(int j = 0 ;j < 26 ;j ++)q -> next[j] = NULL;p -> next[id] = q;p = p -> next[id];}else{p = p -> next[id];p -> v ++;}}
}int Find(char *str)
{int len = strlen(str);Tree *p = &root;for(int i = 0 ;i < len ;i ++){int id = str[i] - 'a';p = p -> next[id];if(p == NULL) return 0;}return p -> v;
}int main ()
{int i ,n ,m ,sum;char str[5000];double num[10];while(~scanf("%d %d" ,&n ,&m)){for(i = 0 ;i < 26 ;i ++)root.next[i] = NULL;while(n--){scanf("%s" ,str);Buid_Tree(str);}sum = 0;while(m--){scanf("%d" ,&n);for(i = 1 ;i <= n ;i ++){double max = 0;for(int j = 1 ;j <= 8 ;j ++){scanf("%lf" ,&num[j]);if(max < num[j]) max = num[j];}int now ,ss = 0,mk = 1;max = max * 1.05;for(int j = 8 ;j >= 1 ;j -- ,mk *= 2){if(int(max / (num[j] * 0.95)) == 1) now = 1;else now = 0; ss += now * mk;}str[i-1] = ss; }str[n] = '\0';sum += Find(str);}printf("%d\n" ,sum);}return 0;
}

hdu3724 字典树(商品条形码)相关推荐

  1. hdu5296 01字典树

    根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...

  2. BZOJ 3483 SGU505 Prefixes and suffixes(字典树+可持久化线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3483 [题目大意] 给出一些串,同时给出m对前缀后缀,询问有多少串满足给出的前缀后缀模 ...

  3. 2014百度之星 Xor Sum(字典树+贪心)

    题目在HDU_OJ Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometh ...

  4. HDU6964 I love counting (字典树+莫队)

    题意: 给定一个长度为 nnn 的序列c,qc,qc,q 次询问,每次给出l,r,a,bl,r,a,bl,r,a,b求在[l,r][l,r][l,r]中有多少种不同的值 kkk 满足 k⊕a≤b​.k ...

  5. Beautiful Subarrays (01字典树 瞎搞)

    题意: 题解: 一看问的是子序列,并且还是异或. 首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧. 假设01字典树往左边是0右边是1 ...

  6. CF888G Xor-MST (01字典树+MST)

    题意: 给你n个数,每个数有一个值. 问你这n个数的最小生成树为多少,两点之间的边权为异或值. 题解: 参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸. 我们每次去合并两个点 ...

  7. Perfect Security (01字典树删除点)

    题意: 第一行给你一个n 第二行给你n个数字 分别是a[1],a[2]-a[n]. 第三行给你n个数字 分别是b[1],b[2]-b[n]. 问:第三行的序列可自由排列,要求排列之后的顺序 a[1] ...

  8. Vitya and Strange Lesson (01字典树)

    题意:给定一组数,然后对所有的数进行异或操作m次异或操作,问你每次操作后,没有出现过的最小的非负整数 题解: 首先需要一个性质(ab)c=a(bc); 所以我们没有必要对于所有的数进行异或操作. 我们 ...

  9. 奶牛异或(01字典树)

    题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的. 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值. 我们查询当前 二进制字符串与已经插入 ...

最新文章

  1. 如何更准确的理解面向对象编程中的对象
  2. python爬取贴吧所有帖子-Python爬虫爬取百度贴吧的帖子
  3. OSPF 形成邻居 关系的条件
  4. leetCode 338
  5. Go基础编程:基础数据类型
  6. homelede软路由设置方法_斐讯无线路由器怎么设置 斐讯无线路由器设置方法【详解】...
  7. 从功能层次,阐述CPU、接口和外设之间的交互
  8. python人人语音爬虫(登陆尚未完成,需要使用先登录在查cookie中的t)
  9. mxnet安装(Jetson)
  10. 网络编程—代码—TCP网络传输
  11. 找不到java虚拟机_javabridge.jutil.JVMNotFoundError:找不到Java虚拟机
  12. 香港学计算机,香港求学计算机专业集锦
  13. android主题与风格入门
  14. java 可重入锁 clh_Java可重入锁原理
  15. linux内核分析与应用 -- 内存管理(上)
  16. php 图片 中文乱码,php utf8页面验证码图片中文乱码
  17. Can‘t resolve ‘core-js NPM 引入 core js 失败 解决
  18. 2020软考信息系统项目管理师-案例分析真题解析视频课程-任铄(小任老师)-专题视频课程...
  19. 陀螺仪传感器与方向传感器的区别
  20. 微软商店的iTunes备份文件路径正确修改方法(2022.3.25)

热门文章

  1. JS高级 - 面向对象5(继承,引用)
  2. 【转】JavaScript事件顺序
  3. 【BZOJ】1692: [Usaco2007 Dec]队列变换
  4. PHP封装数据库连接
  5. android开发 获取父控件的高宽
  6. 【转】职场三国杀:为什么职场争斗中认真干活的人有时会败给不干活的人
  7. 微软总裁:比尔盖茨人生简介和名言
  8. 2019.03.21 增删改
  9. PHP连接数据库的三种方式
  10. 十一. 图形、图像与多媒体1.绘图基础