摘要: 这道题有很多种解法,可以用qsort,也可以用Trie树,Trie树做时需要开静态数组开辟空间,动态分配会TLE!在Discuss里看到两组数据,注意一下221122121NONO下面是Trie树做法,在做题之前被某人提醒静态数组不要开得太大,否则会MLE,结果我就悲剧的RE了一晚上!! 2780K110MSView Code #include <stdio.h>#include <string.h>typedef struct node{ int flag; struct node * next[10];}node;node num[500000];int x = 0 阅读全文
posted @ 2011-07-31 20:29 AC_Von 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 大家都知道,Trie树(又称字典树)是一种树型数据结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构,比较易于理解。话说上帝是公平的,简单的东西是要付出相应的代价的!Trie树也有它的缺点,它的内存消耗非常大。下面介绍一个减小内存消耗的小技巧。 我们先看看这个题目:http://acm.sdut.edu.cn/judgeonline/showproblem?problem_id=1500 看看这段程序:#include <stdio.h>#include <string.h>#include < 阅读全文
posted @ 2011-07-31 18:35 AC_Von 阅读(2579) 评论(2) 推荐(1) 编辑
摘要: 使用并查集查找时,如果查找次数很多,那么使用朴素版的查找方式肯定要超时。比如,有一百万个元素,每次都从第一百万个开始找,这样一次运算就是10^6,如果程序要求查找个一千万次,这样下来就是10^13,肯定要出问题的。 这是朴素查找的代码,适合数据量不大的情况:int findx(int x){ int r=x; while(parent[r] !=r) r=parent[r]; return r;} 下面是采用路径压缩的方法查找元素:int find(int x) //查找x元素所在的集合,回溯时压缩路径{ if (x != parent[x]) { parent[x] = find(pare. 阅读全文
posted @ 2011-07-31 16:02 AC_Von 阅读(5668) 评论(1) 推荐(4) 编辑