题意:
       给你一些名字,让你用一台打印机去打印这些名字,打印机只有三个操作
(1)打印的都是小写字母
(2)每次可以在当前字母的后面加一位,或删除一位。
(3)打印当前串
问你最少多少步可以吧所有的名字都打完。

思路:
      这个题目首先要看懂题目,不然测试数据都模拟不过去,曾加一个字母,删除一个字母,打印,每一种都算是一步,首先我们把所有的字母都建在一棵树里,也就是字典树存下所有的名字,ans =(字典树节点数-1)* 2 + 名字数 - 最长的名字     
下面分步理解这个式子,节点数-1是因为字典树的根节点没有字母,*2是因为假设每一个字母增加上去又删除了,+名字数 是因为每个名字都要输出一下,输出算一步,-最长名字长度,是因为最后一个名字是不用再打印机上删除的,我们选择一个最每一长的这样能达到步骤最少。然后在整体理解下,在一棵树上,每一个节点都是一棵子树的树根,对于每一棵树,他的根节点的字母只要被增加一次删除一次就行了(最后的不用删除)。这样就可以很好的理解答案为什么是

ans = T_n * 2 + n - maxl 了。

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

typedef struct Tree
{Tree *next[26];
}Tree;Tree root;
int sum;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){sum ++;q = (Tree *)malloc(sizeof(root));for(int j = 0 ;j < 26 ;j ++)q -> next[j] = NULL;p -> next[id] = q;}p = p -> next[id];}
}int main ()
{int n ,i;char str[55];while(~scanf("%d" ,&n)){for(sum = 0 ,i = 0 ;i < 26 ;i ++)root.next[i] = NULL;int maxl = 0;for(i = 1 ;i <= n ;i ++){scanf("%s" ,str);if(maxl < strlen(str)) maxl = strlen(str);Buid_Tree(str);}printf("%d\n" ,sum * 2 + n - maxl);}return 0;
}

hdu3460 字典树(打印机)相关推荐

  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. char*,const char*,string的相互转换 C++
  2. 设计模式之笔记--抽象工厂模式(Abstract Factory)
  3. final和static
  4. 人生感悟:一个男人必须具有的东西
  5. 【Linux C 多线程编程】互斥锁与条件变量
  6. 第5章 Python 数字图像处理(DIP) - 图像复原与重建8 - 估计噪声参数
  7. 用python绘制玫瑰花的代码_python也能玩出玫瑰花!程序员的表白代码
  8. Python与JavaWeb的第一次碰撞
  9. PIE SDK矢量数据的读取
  10. 27. Remove Element
  11. 洛谷P2280 [HNOI2003] 激光炸弹 [前缀和]
  12. mqtt 推送的客户端测试方法
  13. Spring Cloud Netflix Eureka组件服务注册及发现源码浅析
  14. android基带版本,Android - 基带版本为未知时自动隐藏
  15. 第二章 GD MCU程序下载
  16. Vue【vue-seamless-scroll】滚动组件及注意事项
  17. 基于SSM的垃圾分类管理系统-含论文【数据库设计、论文、源码、开题报告】
  18. 文件已上传服务器去哪找,ftp文件服务器上传后的文件在哪
  19. 二手车交易数据接口调用代码返回示例
  20. 详解Python正则表达式中group与groups的用法

热门文章

  1. Apache Spark机器学习.1.7 机器学习工作流示例
  2. Android OpenCV Manager简介
  3. cursor的moveToNext()与moveToFirst()
  4. quartz集群调度机制调研及源码分析---转载
  5. oracle启动服务和监听命令
  6. 将某个目录上的Excel表,导入到数据库中.sql
  7. 并发编程-单元练习题
  8. JAVA课程设计——“小羊吃蓝莓”小游戏
  9. ELF Format 笔记(十三)—— 段权限
  10. Power of Cryptography