数据结构
文章平均质量分 70
zxy_snow
这个作者很懒,什么都没留下…
展开
-
关于 栈(C语言) ——(参考算法导论)
因为想要学DFS && BFS。好像必须得会栈和队列。而这俩东东是数据结构的东东。。下学期会讲,额,以前一直没耐心好好看,今天中午看了好长时间,自己把代码写出来了,虽然很简单吧,呵呵,不过蛮有成就感的,(*^__^*) 嘻嘻……栈,先进后出,嗯,虽然我现在没怎么做关于这方面的题,还不会应用,不过理解万岁,嘻嘻,以后会用得着的~#include #include int n,N; //N是个数 int s[800];int StackEmpty() //判断栈是否为空的函数 {原创 2010-07-14 15:15:00 · 1005 阅读 · 3 评论 -
zoj 2334 Monkey King(左偏树+并查集)
<br />感想及学习资料详见:http://blog.csdn.net/zxy_snow/archive/2011/01/22/6158479.aspx<br /> <br />纠结了一天了,这题终于A掉了。<br /> <br />昨天看到这题,用了一堆方法之后,SF,SF,SF = =。。一搜,左偏树。神马东东,第一次听说 = =。。。<br /> <br />印了个论文,自己看。。然后自己敲,用指针。。。SF,SF,SF。。。不知道为啥。。<br /> <br />好吧。刚才搜到一个用int型当指针原创 2011-01-22 15:14:00 · 2179 阅读 · 0 评论 -
BST的操作
<br />BST的插入,中序遍历,删除,求前驱,求后继,求最大,最小值的操作。<br /> <br />参考算导~<br /> <br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>using namespace std;typedef struct BST{ int key; BST *lchild,*rchild,*parent; // 存左右孩子以及父原创 2011-01-28 12:04:00 · 1250 阅读 · 0 评论 -
数论——模运算
<br />今天LZS问我一道数论题,我就翻了翻算导。。。把模运算的除法给看了下,感觉不错~<br /> <br />一些结论<br /> <br /> (a+ b) % n = (a % n + b % n) %n <br /> <br /> (a - b) % n = (a % n - b % n) %n <br /> <br /> (a * b) % n = (a % n) * (b % n)% n <br /><br /> a原创 2011-01-28 20:27:00 · 3186 阅读 · 2 评论 -
zoj 1808 || poj 1056 IMMEDIATE DECODABILITY
<br /> <br />给你几个二进制代码,如果有其中一个代码是另一个的前缀,输出is not immediately decodable,反之,输出可编码。<br /> <br />Trie水过。开的空间应该最小是8*10。<br /> <br />#include <cstdio>#include <cstdlib>#include <iostream>#include <string.h>#define MAX 100using namespace std;typedef s原创 2011-01-31 22:15:00 · 1216 阅读 · 0 评论 -
zoj 1825 Compound Words
<br />给出一系列单词,如果一个词是由其他两个词连接而成的就输出,输入输出都是按字典序来的。<br /> <br />第一反应是用字典树,昨晚敲了敲感觉差不多,就是网被断了没法交 = =。。。<br /> <br />今早交了后一直WA,要么超内存。就用了malloc。<br /> <br />我一直很纳闷,如果有 a ab abc b c 这几个单词,那么abc是否要输出呢?找了个标程 = =。。网上的都是用STL做的。。。好短。。。<br /> <br />结果呢,是要输出的,那我的程序就错了原创 2011-02-12 11:33:00 · 938 阅读 · 0 评论 -
ural 1022. Genealogical Tree
裸的拓扑排序。昨晚btw一写,我才觉得,我以前写的拓排,真慢啊真慢。。他直接用DFS盖时间戳了 。。。T T。。。这个是btw的代码。。。#include #include #include #define N 100static int g[N + 1][N + 1];static int n;static int toporder[N + 1];static int count;static char used[N + 1];static void topsort(v原创 2011-05-10 10:27:00 · 858 阅读 · 0 评论 -
ural 1136. Parliament
<br />相当于,给你二叉树的后序遍历和中序遍历,求先遍历右子树,再遍历左子树,再遍历根。<br /> <br />其实上面这个遍历就是前序遍历的逆。直接求前序遍历,然后从后往前输出即可。<br /> <br />这个遍历我想了好久,需要用递归,但是开始不知道往哪个方向上想。后来搜了下,瞟了一眼。今早在实验室想了一个多小时,终于想出来了。<br /> <br />从后序遍历中找到根,然后在中序遍历的相应位置找到分成的两棵子树,然后再进行遍历。<br /> <br />递归真的很神奇~!<br /> <br原创 2011-05-13 13:09:00 · 1009 阅读 · 0 评论 -
hdu 2846 Repository
查询单词是否存在于上面的所有单词中,输出存在的单词数。因为数量很大啊,所以不能枚举,然后就想到字典树了。但是肯定不能建一棵,因为查询的单词可能是从中间开始的。所以就枚举单词的每个字母作为起点,剩下的去建树,每个字母建成一棵树,这样的话,查找的代价就是单词的长度。不过内存需要开很大原创 2011-07-12 17:16:27 · 795 阅读 · 0 评论 -
My归并树,划分树模板。
POJ 2104 划分树,时间复杂度O(MlogN),归并树,时间复杂度O(Mlog^3N)。归并树#include #include #include #include #include #include #include #include #inc原创 2011-08-11 13:23:19 · 2261 阅读 · 8 评论 -
划分树学习(poj 2104,hdu 3473)
线段树一维的刷差不多了,求区间第K数一直卡着。划分树和归并树都可以求,比较了一下时间效率,划分树比归并树快了很多,而且POJ有个求区间第K数的题用归并树居然过不去。鉴于时间短,我决定把划分树给弄明白= =。。借用下小HH的图。划分树和归并树都是用线段树作为辅助原创 2011-08-12 11:11:33 · 11959 阅读 · 8 评论 -
hdu 2222 Keywords Search(AC自动机入门题)
昨晚开始想学AC自动机,然后尽早看了看算导的KMP。。。以前看过,忘差不多了。今天看了看一个学习AC自动机的文章,磕磕绊绊理解了。trie的建立很随意,关键是失败指针这个概念。稍微有点抽象。这个指针的建立,用到了BFS,引用那个文章的话“ 假设有一个节点k,他的失败原创 2011-08-22 17:16:01 · 2452 阅读 · 3 评论 -
hdu 2896 病毒侵袭
算是AC自动机水题吧。找到哪几个网站带病毒,跟上个题不同的时候,算过的id 不可以赋值为-1 = =。。。因为下面的网站还要匹配呢。空格到底算不算可见字符捏???经测试,这个输入没有字符串中间带空格的。。。T T。。然后sort,unique去重即可。。#incl原创 2011-08-22 17:56:17 · 1527 阅读 · 0 评论 -
zoj 1060 || poj 1094 Sorting It All Out(拓扑排序)
拓扑排序。 = =。我就因为要应付考试,所以看了看。顺便还看了AOE网,考试居然出中了,大幸。。。觉得这个也不难啊,拓排。把出度为0的点删掉,把它出的边删掉,连接的顶点的出度减1,一直这样。。。这个题。好吧。我承认开始没看懂意思。结果做完之后一直很纳闷。poj的disscuss很强大。看了人家思路。终于理解啥意思了。T T。边是一条一条读的,如果读到某条边就找到环(即矛盾了),就记录这个边,输出矛盾。如果把边读完,仍不能排序,输出不能排序。如果读到某条边可以把它全部排列完的话,就输出边的标号,以及排好的顺序原创 2011-01-12 22:24:00 · 2273 阅读 · 2 评论 -
hdu 1040 As Easy As A+B(堆排练习水题~)
堆排写得没有快排顺利 = = 。。。等隔一段时间再写试试#include #include #include #include using namespace std;int n;void HeapMin(int a[],int i,int heapsize){ int larg; int l = i*2, r = i*2+1; if( l原创 2010-11-16 23:24:00 · 1020 阅读 · 0 评论 -
关于 队列(C语言) ——(参考算法导论)
<br />栈和队列好像都是在一起的,呵呵。<br /> <br />队列是先进先出,算法导论这个解释还把这个数组弄成环了,真纠结,只写了代码,不知道用处,先放着。呵呵<br /> <br />而且,自己写的判断函数觉得有点问题,那个如果出错的话,怎么退出捏。。应该在主函数里面加个判断才是。懒得弄了。我觉得要是知道长度就不会溢出了。额。。<br /> <br /> <br />#include <stdio.h>#include <stdlib.h>int head,tail,N; //N是个数原创 2010-07-14 15:43:00 · 747 阅读 · 0 评论 -
zoj 1259 || poj 1363 Rails(栈~!)
<br />类似hdu1022,比1022还简单 = =。。。<br /> <br />题意没耐心读下去,以至于理解错误 = =。。。<br /> <br />从A的火车顺序是1、2、3。。。N。 到达B的序列是输入的序列。<br /> <br />栈的应用。<br /> <br />#include <stdio.h>#include <stdlib.h>#include <iostream>#include <string.h>#include <stack>using namesp原创 2010-11-28 17:39:00 · 2111 阅读 · 0 评论 -
10年 ZZUPC校赛第五题 红黑树
红黑树TimeLimit: 1000MS MemoryLimit: 32768 KbDescription 什么是红黑树呢,顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树。。。。 当然,这个是我说的....... 《算法导论》上可不是这么说的: 如果一个二叉查找树满足下面的红黑性质,那么则为一个红黑树。 1)每个节点或是红的,或者是黑的。 2)每个叶子节点(NIL)是黑色的 3)如果一个节点是红色的,那么他的两原创 2010-12-15 13:36:00 · 1244 阅读 · 0 评论 -
zoj 1700 || poj 1577 Falling Leaves(BST应用)
<br />这两天一直在敲堆排,快排。。。这俩各敲了10遍左右了。。。初步计时,堆排3.5分钟,算导写法。<br /> <br />在算导上看了BST,感觉差不都了,开始写,开始写的非递归,死活不对,后来知道了,自己的非递归写法,节点和它的子节点建立不起来联系 = =最后改为递归写法。没有用malloc,不喜欢它 = =。。<br /> <br />这题我做完后再看题才看懂 = =。。。给你拆树的过程。。。去掉叶子节点的树,再去掉叶子节点。。。最后去掉根。所以做法就是倒着建立一棵二叉查找树。最后一个是根节点原创 2010-12-22 15:37:00 · 1811 阅读 · 0 评论 -
zoj 3170 7 Levels of Binary Search Tree(BST = =)
这道题纠结了一天多了。好郁闷。看到这题就感觉,呀,不算太难,搞定上自习去。(P.S. 这个是我昨天下午的想法)。事实证明,写到7点半,建树有点纠结。而我感觉还是应该去上上自习,就去自习了。 = =。效率不高。我当时的问题就是,我把这样一个BST树以完全二叉树(空节点标记为-1)存到了一个数组里,需要把这个数组用指针建成一棵树。当时建得不对。昨晚到实验室,经CW提醒,可以用BFS 。然后就纠结在BFS上了 = =。后来想一种更简单点的,就用node结构体将tmp中的数字读取,然后通过node之间相互连接子节点原创 2010-12-23 18:33:00 · 989 阅读 · 1 评论 -
zoj 1899 || poj 2418 Hardwood Species(Trie~)
<br />字典树~!<br /> <br />之前写过一个纯比较的。。。看poj讨论版貌似应该可以过,但是一直WA = =。。。<br /> <br />昨天写了个字典树,找字典树的题,实在是没有其他的了,只好做这个吧。<br /> <br />这个树很好建,不繁,和昨天那个差不多。只不过这个包括大写还有空格,所以指针要开多点。按理来说,92够了 = =。。可是最低看到95才过。。。不晓得为嘛。。<br /><br /> <br />这个建立字典树,结构体里面存的是这个单词的个数,建的时候到末尾字母,那个原创 2010-12-25 16:49:00 · 1476 阅读 · 2 评论 -
poj 3630 Phone List(依旧Trie~)
<br />给你几个号码,判断是否其中有一个是另一个的前缀。<br /> <br />比如。 <br /> <br />911<br />9110000<br /> <br />那么911是9110000的前缀,输出NO。<br /> <br /> <br /> <br />思路是,用一个字典树存号码。输入一个插入一个。用malloc超时了,所以选择使用静态存储。<br />插入的时候,如果遇到节点flag不为0,那么说明已经有单词末尾到这个节点了,即已经有单词是现在插入单词的前缀了,标记下。<br />如原创 2010-12-26 10:55:00 · 1533 阅读 · 2 评论 -
zoj 2346 || poj 2001 Shortest Prefixes(Trie~!)
先看到poj的这个题了。昨晚看到的,昨晚睡觉想到一种方法,今天上午上自习了,中午回来敲了敲。。WA = =。想的是,如果不止有一个子指针为空,就继续找,直到,只有一个指针为空即可。样例都过不去 = =。理解了比如cabcabdcabde 那个cab三个字母都是只有一个指针为空的,可是,它是这三个的共有前缀,肯定不符合。好吧。又想一种做法。就是,遇到某个字母,结构体里面存的数++,这样的话,只有一个字母经过这儿的话,肯定是这个单词特有的(因为没有其他单词可以经过这个字母),记录下下标即可。如果没有找到,肯定是原创 2010-12-28 13:22:00 · 1478 阅读 · 2 评论 -
zoj 1109 Language of FatMouse(字典树Trie)
<br />这个应该算是字典树的经典应用了吧。<br /> <br />讲需要查找的内容存进字典树里~然后查找这个单词,就能把所存的data给调出来~<br /> <br />详情见大牛BLOG http://www.cnblogs.com/DreamUp/archive/2010/07/23/1783410.html<br /> <br />我的函数都是自己写的哦~~~嘻嘻~~~<br /> <br />WA了数次。因为node数组开小了,如果用malloc就不会出现这种情况了。。。可我不喜欢malloc原创 2010-12-24 23:35:00 · 1237 阅读 · 0 评论 -
poj 2309 BST (^ ^)
这是个很好的题目呢~~画图画了半天 = =、、这是一棵完全二叉查找树 = =。。。给你一个节点n,求n子树中最小,最大值。放图,得睡了,明天继续写。原创 2010-12-29 23:46:00 · 1619 阅读 · 0 评论 -
关于 优先队列(C语言) ——(参考算法导论)
今天在图书馆把优先队列好好看了看,还把快排看了个头~感觉不错~~就是图书馆的椅子太硬了。。坐了快俩小时,咯得慌。。。回来把函数写了下,虽然是参照书的 = = 下次要自己写出来!不过原理已经懂了~~~我这个是实现优先队列插入,堆的维护,删除,这个是最大优先队列~~#include #include #include #include using namespace std;int heapsize = 0;void MaxHeapIFY(int a[],int i){ int原创 2010-11-16 18:50:00 · 2507 阅读 · 2 评论 -
hdu 1040 As Easy As A+B(快排练习水题~)
自己第一次不看书写成快排~~欧也~~~PE数次 = =。。。最后一个不要加空格 = =。。#include #include #include #include using namespace std;int n;int Partition(int a[],int p, int r){ int i = p-1; int x = a[r]; for(int j=p; j原创 2010-11-16 21:18:00 · 1307 阅读 · 0 评论 -
hdu 3065 病毒侵袭持续中
继续AC自动机水题。这个题与上个题区别在于,需要统计出现次数,所以不能统计下就标记然后下次就不统计了,就比如样例AAA,出现AA是两次的。再者就是,匹配串还有其他字符,需要判断一下,遇到其他字符的时候,直接指针移动到root。刚开始开了130个指针,果断MLE了。。#原创 2011-08-22 19:38:07 · 1298 阅读 · 0 评论