--数据结构--
404-unkown
这个作者很懒,什么都没留下…
展开
-
Joseph环(顺序表、链队列)
1.顺序表#includevoid Joseph(int str[][2],int m,int n);int main(){ int m,n,i; //n表示环长,m表示是密码 int str[100][2]; //二维数组用来存储元素值和标志变量 printf("请输入环长和密码:"原创 2014-12-21 16:21:12 · 646 阅读 · 0 评论 -
POJ3468--A Simple Problem with Integers(成段更新)
题目大意:给出一个数列,可以进行两种操作,1、给任意一个区间中的每个数增加x,2、求任意一个区间的区间和分析:用线段树求解。这个题目,首先,要考虑节点里存哪些信息。假设节点里只存sum的话,每次更新都要更新到叶子节点,时间复杂度为O(nlogn),而本题的n以及操作次数均为100000,必然会造成TLE。一个变量不够怎么办?想到的自然就是增加一个变量。原先的sum变量肯定是要保留的,但原创 2015-07-26 15:04:01 · 372 阅读 · 0 评论 -
POJ1151--Atlantis(离散化+扫描线)
题目大意:给出n个矩形,求面积并分析:线段树+离散化+扫描线。先以Y轴(横线)建立线段树,当然,这里需要离散化。然后,用一条直线从左到右扫描,碰到一条矩形竖边的时候,就计算该直线有多长被矩形覆盖,以及被覆盖部分是覆盖了几重。碰到矩形左边,要增加被覆盖的长度,碰到右边,要减少被覆盖的长度随着扫描线的右移动,覆盖面积不断增加。每碰到一条矩形的纵边,覆盖面积就增加( 此时扫描线被矩形原创 2015-08-18 11:06:32 · 296 阅读 · 0 评论 -
HDU2665--Kth Number(划分树)
#include #include #include #include #include #include #include #include #include #include #define MID(x,y) ( ( x + y ) >> 1 )#define L(x) ( x << 1 )#define R(x) ( x << 1 | 1 )#define BUG原创 2015-09-01 22:06:35 · 250 阅读 · 0 评论 -
POJ1177--Picture(扫描线)
题目大意:给出n个矩形,求周长并分析:线段树+扫描线。这里给出的是整数,而且范围不大,所以,不需要离散化。和面积并差不多。不过,还是有点区别的。numseg[i]数组记录有几条横边需要增加lbd[i],ubd[i]表示当前区间的上下(也可以理解为左右,因为我是按Y轴建树的,所以自然就是上下啦~)两个端点是否被覆盖cover[i]表示当前区间被几条边覆盖len[i]表原创 2015-08-18 22:34:54 · 322 阅读 · 0 评论 -
爱爬山的小Z
E - 爱爬山的小ZTime Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)Submit StatusProblem Description从前有一座ACdream王国,这个王国被群山环绕,因此外面的人很少有人知道它的存在。这个王国里,有一位很喜欢爬山的原创 2015-09-09 15:06:32 · 710 阅读 · 0 评论 -
POJ3250--Bad Hair Day(栈)
题目大意:有n头牛,身高不一样,排成一排,每头牛可以看见后面一头牛的个数之和,如果相等就看不见,因为是看头发啦~,头发在眼睛上面。嗯~出题人应该是这样想的,23333 分析:一眼就能看出来是用栈来做。我是从后往前做的,栈顶的元素小于当前身高,栈顶元素出栈,就说明当前的牛看得见栈顶的牛,接着比较,直到栈顶的牛的身高比当前身高要高,那么就找到了当前牛能看见的最远距离。不要问我为什么原创 2015-08-19 22:55:37 · 441 阅读 · 0 评论 -
POJ2823--Sliding Window(单调队列)
题目大意:给出一个数列,给定一个区间大小k,求从左到右每k个数字中的最小值和最大值 分析:单调队列。所谓单调队列,就是队列有单调性啦~因此,以求最小值为例,要想一个数入队的话,这个数就要比队尾元素大。那么队头元素一定是最小的,当队头元素的下标等于当前区间的左端点时,就可以出队了。代码:#include #include #include #include u原创 2015-08-19 23:02:16 · 281 阅读 · 0 评论 -
POJ2559--Largest Rectangle in a Histogram(栈)
题目大意:有n个宽为1,高为h1,h2,h3...hn的长方形从左到右依次排列,形成一个柱状图,求最大矩形面积 分析:运用栈来求解。首先,我们可以得到这样一个事实,假设最大的矩形的两个端点为L[i], R[i],高度为h,那么端点两边的矩形的高都比这个最大矩形的高h要小。接下来,我们从左到右,依次枚举各个矩形,假设当前矩形的高就是最大矩形的高,然后就开始求L[i]。从右到左R[原创 2015-08-19 23:08:35 · 574 阅读 · 0 评论 -
POJ3494--Largest Submatrix of All 1's(二维栈)
题目大意:给出一个m*n的01矩阵,求由1组成的最大矩形分析:这题也是栈的运用,只不过,现在是二维的,所以,我们要先转换成一维。首先,我们可以一排一排的计算,而每一排每一个矩形的宽都是1,若改点为0,则没有高。若为1,则该矩形的高就是当前的1加上它这一列的上方连续的1的个数。这样子,我们就化二维为一维了。之后的计算就和POJ2559差不多了,传送门http://blog.csdn.原创 2015-08-28 16:13:20 · 756 阅读 · 0 评论 -
POJ2082--Terrible Sets(栈)
题目大意:给出n个连续的矩形,并且给出他们的底边宽和高。求最大矩形面积分析:和POJ2559原理一样。传送门http://blog.csdn.net/hhhhhhj123/article/details/47790801。只是POJ2559的底边宽都是1,而这题则不一样。所以代码有些许不同。代码:#include #include #include using n原创 2015-08-28 16:05:38 · 899 阅读 · 0 评论 -
链栈
#include typedef struct Node{ int data; struct Node *next;}Node;Node *StackNode;Node *Push(Node *top) //入栈{ Node *s=NULL; s=(Node *)malloc(sizeof(Node));原创 2014-12-21 16:16:44 · 323 阅读 · 0 评论 -
二叉树的建立与遍历
1.从键盘输入前序序列建立二叉树#include#includetypedef struct BiNode{ char data; struct BiNode *lchild,*rchild;}BiNode; BiNode *Create(BiNode *root){ char ch; root=(BiNode *)mallo原创 2014-12-04 23:00:20 · 269 阅读 · 0 评论 -
静态查找(顺序、折半)
#include#includevoid SeqSearch(int a[],int r) //顺序查找{ int i=9; a[0]=r; while(a[i]!=r) { i--; } if(i!=0) printf("元素所在位置:%d\n",i); else printf("没有该元素!");}int BinSearch1原创 2014-12-21 16:18:43 · 396 阅读 · 0 评论 -
邻接矩阵(无向图)
#includetypedef struct MGraph{ int vertex[10],arc[10][10]; int vertexNum,arcNum;}MGraph;MGraph G;int visited1[10]={0};int visited2[10]={0}; void InitMGraph(MGraph *G) //原创 2014-12-21 16:23:28 · 781 阅读 · 0 评论 -
POJ3264--Balanced Lineup(线段树模板题)
题目大意:给出一个数列,求任意区间的区间最值之差。分析:线段树模板题。原创 2015-07-26 11:39:38 · 313 阅读 · 0 评论 -
HDU5289(2015多校1)--Assignment
题目大意:给出一个数列,求有多少个连续区间满足,区间最大值-区间最小值分析:有好多做法。。一一介绍。 1.RMQ--ST算法+二分先枚举左端点,再二分右端点。用ST算法求区间最值。ST算法的讲解在我另一篇文章有写,传送门http://blog.csdn.net/hhhhhhj123/article/details/47054933,我在下面的代码改动一下,就是求对数的地方,原创 2015-07-25 21:06:53 · 311 阅读 · 0 评论 -
POJ3614--Sunscreen
题目大意:有C头牛要去晒日光浴,每头牛有自己的minSPF和maxSPF,他们需要这两者之间的强度的阳光,现在有L种防晒霜,每种防晒霜可以把阳光强度稳定在SPF_i,有cover_i瓶。一头牛至多只能用一瓶防晒霜。 分析:首先,将牛按minSPF升序,防晒霜按SPF_i升序,把当前的防晒霜抹给minSPF小于等于SPF_i的牛中maxSPF最小的。因为maxSPF越大(假设minSPF相同原创 2015-08-23 19:12:59 · 457 阅读 · 0 评论 -
POJ2010--Moo University-Financial Aid(优先队列)
题目大意:从C头牛里选N头牛,每头牛有两个属性,得分score和经费aid,在总经费不超过F的情况下使得N头牛的得分中位数最大。 分析:先将C头牛按得分score升序,然后,我们假设每个i都可以作为中位数,lower[i]记录在i之前(也就是分数比它低)的总经费,upper[i]记录在i之后(也就是分数比它高)的总经费,最后,由于是求最大的中位数,所以,得分从后往前循环,第一个满足lowe原创 2015-08-24 18:20:48 · 634 阅读 · 0 评论 -
大臣的旅费(求树的最远点对,即树的直径)
题目大意:求树上两点的最远距离。分析:可以用DP解,也可以用两次DFS。这里我用两次DFS,树上最远的点对一定是树的直径,而且树上其他点到树的直径某一端点肯定是最远的,第一遍搜找到直径的某个端点,第二次就可以找出来树的直径了,然后就找到了最远的点对啦。关键在于,理解树上任意一点搜一次的最远点一定在直径的某个端点上。Code:#include #include #in原创 2016-03-16 14:48:50 · 494 阅读 · 0 评论