【数据结构】
__流影
读书、探知、成长、做有意义的事!
展开
-
小猴子下落 南工63
对于一个节点k,它的左儿子、右儿子的编号分别是2k和2k+1,即它所在的位置通过判断奇偶性来看小猴子会落在哪个个子树里面:对于落入根节点左子树的小猴子来说,只需知道该小猴是第几个落在根的左子树里面的,就可以判断出它下一步是往左还是往右了,依此类推,直到小猴到达叶子上。(注意:这个题目找的是叶子的编号,编号是从上到下、从左到右的顺序编的,包括节点也有编号!)# inclu原创 2013-04-10 09:02:15 · 742 阅读 · 0 评论 -
找球号(三)南工528
#include int main(){ int n,x,l; while(scanf("%d",&n)!=EOF) { l=0; while(n--) { scanf("%d",&x); l^=x; } printf("%d\n",l); } return 0;}一个数和另一个数异或之后再和这个数异或一次等于数本身!原创 2013-04-11 09:24:06 · 743 阅读 · 0 评论 -
找球号(二)南工138
方法和找球号一基本一样,只不过多了些操作!# include int a[3200000];int main(){ int n, m, u; char s[10];// freopen("in.txt","r", stdin); scanf("%d", &n); while (n--) { scanf("%s%d", s, &m); if (s[0]=='原创 2013-04-11 08:56:53 · 652 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。//将有序数组a[]和b[]合并到c[]中void Mem转载 2013-05-08 20:16:08 · 503 阅读 · 0 评论 -
POJ 1436 Horizontally Visible Segments(线段树建图+枚举)
题目连接:http://poj.org/problem?id=1436题意:给一些线段,每个线段有三个值y1, y2, x代表起点为(x, y1),终点为(x, y2)的线段。当从一个线段可以作水平线到另一个线段并且不穿过其他线段时,就称这两个线段时水平可见的。当三个线段可以两两水平可见,就称为形成一个线段三角。问:在这些线段中有多少个这样的线段三角?分析:可以把每条线段看做是一个点,如果原创 2014-05-14 09:52:59 · 883 阅读 · 0 评论 -
HDU 3367 Pseudoforest(伪森林)(并查集)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3367题意:在图论中,如果一个森林中有很多连通分量,并且每个连通分量中至多有一个环,那么这个森林就称为伪森林。 现在给出一个森林,求森林包含的最大的伪森林,其大小通过所有边的权值之和来比较。分析:1、一开始想的是:在每个连通分量中求一个最大生成树,然后加一条最大的边,再把每个连通分量算出原创 2014-05-14 11:10:36 · 1093 阅读 · 0 评论 -
已知二叉树的先序和中序求后序和已知中序和后序求前序
首先介绍树的三种遍历方式的遍历顺序:先序遍历:根、左子树、右子树(特点:第一个元素为根)中序遍历:左子树、根、右子树(特点:根的两边分别为左子树和右子树)后序遍历:左子树、右子树、根(特点:最后一个元素为根)有如下图的二叉树:其先序、中序、后序遍历分别为:DBACEGF、ABCDEFG、ACBFGED。1、已知先序和中序求后序先序遍历的第一个字符为根,因此只需在中序原创 2014-04-15 16:54:10 · 4255 阅读 · 2 评论