题意:

     给你一堆商品的名字,然后给你一些条形码,问你这些条形码转换成的字符串的

前缀在商品中出现的个数,条形码的每个字母是八个二进制数字,有两种数,大的是小的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;
}

最新文章

  1. My97DatePicker时间控件在项目中的应用
  2. 使用python解析Json字符串-获取Json字符串关键字
  3. arch下的启动问题解决
  4. .net 小技巧
  5. 【转】java环境配置
  6. 图解CISCO 3550忘记密码解决方法
  7. MVC 开启gzip压缩
  8. Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架
  9. flume安装及配置
  10. JSON数据解析及gson.jar包
  11. 老版VC++线程池
  12. Leetcode_234_Palindrome Linked List
  13. 内部yum仓库制作
  14. SpringBoot修改Redis序列化方式
  15. PeopleSoft Excel To CI
  16. Java学习笔记43(Spring的jdbc模板)
  17. Jetson tx1 安装ROS
  18. Linux下安装python3及相关包
  19. .Net页面局部更新的思考
  20. mysql 数据操作 单表查询 简单查询 避免重复DISTINCT

热门文章

  1. 【转载】Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)
  2. PAT-1144(The Missing Number)set的使用,简单题
  3. JQGrid 应用
  4. django Form 效验
  5. Mongo的相关语法
  6. 2020 年安装 FreeBSD 系统的基础视频
  7. Everything is Serverless,从开源框架对比说起
  8. C# 应用 - 封装类访问 Oracle 数据库
  9. Windows下的Linux子系统
  10. LZZ高级程序语言设计之多重for循环