题意:
     给你一些串,然后求出每个串出现的概率。

思路:

     简单题目,做法也很多,我用字典树做了下,然后又用map做了下,其实这个题目我感觉直接排序一遍之后线性输出应该是最简单最快的(这个没敲),就是只是排序的时间复杂度而已O(n*log(n)*len)字典序的排序时间复杂度记得*len.


字典树829MS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>using namespace std;typedef struct Tree
{Tree *next[129];int v;
}Tree;typedef struct
{char s[32];
}SS;Tree root;
SS S[10005];bool camp(SS a ,SS b)
{return strcmp(a.s ,b.s) < 0;
}void BuidTree(char *str)
{int len = strlen(str);Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i];if(p -> next[id] == NULL){q = (Tree *)malloc(sizeof(root));q -> v = 0;for(int j = 0 ;j <= 128 ;j ++)q -> next[j] = NULL;p -> next[id] = q;p = p -> next[id];}else p = p -> next[id];}p -> v ++;
}int Query(char *str)
{int len = strlen(str);Tree * q = &root;for(int i = 0 ;i < len ;i ++){int id = str[i];q = q -> next[id];if(q == NULL) return 0;}return q -> v;
}int main ()
{int i ,n ,id;char str[35];n = id = 0;for(i = 0 ;i <= 128 ;i ++)root.next[i] = NULL;while(gets(str)){if(!Query(str)){id ++;int len = strlen(str);for(int j = 0 ;j <= len ;j ++)S[id].s[j] = str[j];}BuidTree(str);n ++;}sort(S + 1 ,S + id + 1 ,camp);for(i = 1 ;i <= id ;i ++)printf("%s %.4lf\n" ,S[i].s ,Query(S[i].s) * 100.0 / n);return 0;
}map 1500ms
#include<map>
#include<string>
#include<stdio.h>
#include<string.h>
#include<algorithm>using namespace std;typedef struct
{char s[35];
}SS;SS S[10005];
map<string ,int>mark;bool camp(SS a ,SS b)
{return strcmp(a.s ,b.s) < 0;
}int main ()
{mark.clear();char str[35];int id = 0 ,n = 0;while(gets(str)){if(mark[str] ++ == 0){int len = strlen(str);id ++;for(int i = 0 ;i <= len ;i ++)S[id].s[i] = str[i];}n ++;}sort(S + 1 ,S + id + 1 ,camp);for(int i = 1 ;i <= id ;i ++){printf("%s %.4lf\n" ,S[i].s ,mark[S[i].s] * 100.0 / n);}return 0;}

poj2418map或者字典树相关推荐

  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. premiere pr 视频截图
  2. python多进程和多线程一起使用_Python3多进程与多线程区别及使用(2.线程)
  3. Quartz Scheduler失火指令说明
  4. ASP技巧:在Access数据库中重命名表
  5. Packet for query is too large (12164278 > 4194304). You can change this value
  6. 经过实践的小企业的生存之道
  7. 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)
  8. DI使用value属性与value标签的区别以及xml预定义实体引用
  9. input失去焦点和获得焦点jquery焦点事件
  10. Java基础知识(一) 自增、自减运算符
  11. Centos6.5 安装 Mysql-5.6.41
  12. Android编码规范
  13. 【狂神说】Spring学习笔记(全)
  14. 架空线路的基本结构及组成
  15. Excel时间段计算的相关公式
  16. Kinect 2.0 安装体验
  17. 前台服务 StartForeground
  18. linux下常用软件列表
  19. 法雷序列的c语言程序,程序设计实践(一).PDF
  20. 微软4000亿收购动视暴雪,背后逻辑是什么?

热门文章

  1. 深度操作系统 15 Beta——每一处都在“靓”变
  2. CSS中z-index全解析
  3. leetcode:Plus One
  4. 做业务与技术之间的桥梁
  5. 菜鸟requireJS教程---2、基本知识
  6. PB初体验 class one
  7. arcgis 10.0中的server报错说工作站服务没有打开
  8. 此blog已经迁移~~~
  9. viewDidUnload 和 dealloc 的区别
  10. 安装好的苹果系统部分截图