![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
▼数据结构
文章平均质量分 78
Kuro同学
这个作者很懒,什么都没留下…
展开
-
hdu1247 Hat’s Words 字典树
Problem DescriptionA hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.You are to find all the hat’s words in a dictionary. Inpu原创 2014-12-24 12:03:26 · 1010 阅读 · 0 评论 -
数据结构 归并排序-逆序数对
逆序对是指数列a[1],a[2],a[3]…中的任意两个数a[i],a[j] (ia[j],那么我们就说这两个数构成了一个逆序对。而归并排序的合并两个排列的过程中会将右边的有序序列的元素依次插入前面的 有序序列如(3 7 12) ( 5 6 8)将5 插入 (3 7 12) 中因为后面有序 所以 假设 5和左边全部元素构成逆序对 所以有mid+1原创 2014-12-28 19:25:46 · 1126 阅读 · 0 评论 -
PAT 线性结构3. 求前缀表达式的值 栈的应用
题目链接:前缀表达式求值题解:同后缀表达式求值思路:遇到数值则入栈,遇到操作符则从栈中取出最上面的两个数值进行操作,再将结果入栈,最后得到的栈顶元素则为答案。前缀表达式从后往前遍历即可。代码:#include#include#include#includeusing namespace std;int op(原创 2015-03-27 22:48:23 · 1135 阅读 · 0 评论 -
PAT1066 Root of AVL Tree 平衡二叉树的实现
链接:PAT1066题意:求依次插入N个带权节点的平衡二叉树最后的根节点的权是多少代码:#include#include#include#includeusing namespace std;typedef struct node{ int data; node *left,*right; int h;原创 2015-04-21 20:05:47 · 1334 阅读 · 1 评论 -
HDU 4192 Guess the Numbers 栈的应用
Problem DescriptionJohn has never been very good at maths. Due to his bad grades, his parents have sent him to the Academic Coalition of Mathematics (ACM). Despite the large amount of money his pare原创 2014-10-17 19:34:35 · 931 阅读 · 0 评论 -
hiho1079 线段树区间修改离散化
题目链接:hihocoder1079代码:#include#include#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 100050using namespace std;int cnt[maxn<<1];原创 2015-06-11 16:24:32 · 806 阅读 · 0 评论 -
hiho1080 更为复杂的买卖房屋姿势
题目链接:hihocoder1080题解思路:题目中对区间修改有两个操作:0 区间所有点增加v1 区间所有点改为v容易想到应该使用到两个懒惰标记 一个记录替换 一个记录增减但这里会涉及到一个顺序问题 ,这里就需要考虑到 懒惰标记传递的策略:如果出现替换标记 就应该把增减标记覆盖如果同区间出现多个增减标记 则需要将标记叠原创 2015-06-11 20:26:37 · 1148 阅读 · 0 评论 -
数据结构 线索二叉树 原理及实现
通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。 记ptr指向二叉链表中的一个结点,以下是建立线索的规则: (1)如果ptr->lc原创 2014-11-16 15:58:00 · 2191 阅读 · 0 评论 -
NOIP 求前序排列
题目描述给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度输入格式每个测试文件只包含一组测试数据,每组输入包含两行,第一行输入一个字符串表示二叉树的中序排列,第二行输入一个字符串表示二叉树的后序排列。输出对于每组输入数据,输出二叉树的先序排列。样例输入BADCBDCA样例输出ABCD通原创 2014-11-22 14:48:43 · 1290 阅读 · 0 评论 -
数据结构 堆排序原理及其实现
堆:堆是具有特殊性质的二叉树每个结点都大于其左右儿子的的二叉树叫大顶堆每个结点都小于其左右儿子的二叉树叫做小顶堆堆排序图解: 给定一个整形数组a[]={16,7,3,20,17,8},对其进行堆排序。 首先根据该数组元素构建一个完全二叉树,得到 然后需要构造初始堆,则从最后一个非叶节点开始调整,调整过程如下:20和原创 2015-01-26 20:15:23 · 1369 阅读 · 0 评论 -
hihocoder 1105 题外话·堆 堆的应用
题目链接:1105一共两种操作 放入和取出(MAX)的最多有10W次操作 ,暴力肯定会超时。我们可以将盒子理解为一个大顶堆,即父节点大于左右子节点。1.每次放入糖果时往上维护堆2.取出时模仿堆排序的算法 将根节点(max)输出并与最后一个节点交换 再维护堆代码:#inclu原创 2015-01-27 09:38:38 · 1108 阅读 · 0 评论 -
PAT 1074 Reversing Linked List 单链表的应用
题目链接:Reversing Linked List 题意:第一行输入一条单链表的表头地址 和 链表长度n和一个反转数K接下来n行 每行输入链表中一个节点的 地址,权值,和下一个节点的地址输出 每K个节点 进行一次反转 得到的链表 代码:#include#include#includeusing namespa原创 2015-03-26 09:12:28 · 1019 阅读 · 0 评论 -
数据结构 算法3.4(栈的应用) 表达式求值(stl版and数组模拟版)
问题是给出一串表达式原创 2014-10-17 14:47:45 · 1525 阅读 · 0 评论 -
hiho1078 线段树的区间修改
题目链接:hihocoder1078题解思路:模板题 需要用到懒惰标记代码:#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 100050using namespace std;int su原创 2015-06-10 21:44:09 · 795 阅读 · 0 评论 -
hiho1128 非有序数组的二分查找 (快速排序)
链接:hihocoder1128代码:#include#include#includeusing namespace std;int a[1000050];int _sort(int left,int right){ int x=a[left]; while(left<right) { whil原创 2015-06-13 15:09:53 · 1329 阅读 · 0 评论 -
CSUOJ 1329 一行盒子 数组模拟链表 附LIST解法
Description你有一行盒子,从左到右依次编号为1, 2, 3,…, n。你可以执行四种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令)。2 X Y表示把盒子X移动到盒子Y右边(如果X已经在Y的右边则忽略此指令)。3 X Y表示交换盒子X和Y的位置。4 表示反转整条链。指令保证合法,即X不等于Y。例如,当n=6时在初始状态下原创 2014-09-09 20:08:25 · 1474 阅读 · 0 评论 -
康托展开(哈希方法)
康托展开 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s = ["A", "B", "C", "D"],它的一个排列 s1 = ["D", "B", "A", "C"],现在要转载 2016-03-16 19:16:17 · 879 阅读 · 0 评论 -
数据结构 二叉排序树 操作及实现
#include#include#include#includeusing namespace std;typedef struct Bitnode{ int data; struct Bitnode *lchild,*rchild;} Bitnode,*Bitree;int Searchtree(Bitree T,int num,Bitree F,Bitree原创 2014-11-20 09:46:20 · 1886 阅读 · 0 评论 -
数据结构 二叉树的建立及三种遍历方法
#include#include#include#includeusing namespace std;typedef struct Binode{ char data; struct Binode *lchild,*rchild;}Binode,*Bitree;void CreatTREE(Bitree &T){ char ch; scanf("%原创 2014-11-15 15:26:04 · 1743 阅读 · 0 评论 -
HDU 1166 敌兵布阵 线段树
Problem DescriptionC国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。原创 2014-08-06 09:25:08 · 974 阅读 · 0 评论 -
HDU 1823 Luck and Love 二维线段树
Problem Description世界上上最远的距离不是相隔天涯海角而是我在你面前可你却不知道我爱你 ―― 张小娴前段日子,枫冰叶子给Wiskey做了个征婚启事,聘礼达到500万哦,天哪,可是天文数字了啊,不知多少MM蜂拥而至,顿时万人空巷,连扫地的大妈都来凑热闹来了。―_―|||由于人数太多,Wiskey实在忙不过来,就把统计的事情全原创 2014-08-07 17:06:33 · 1225 阅读 · 0 评论 -
poj 2406 Power Strings KMP
DescriptionGiven two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiat原创 2014-07-19 17:52:33 · 1043 阅读 · 0 评论 -
HDU 1272 小希的迷宫 并查集
Problem Description上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路原创 2014-07-14 20:34:02 · 872 阅读 · 0 评论 -
POJ 1703 Find them, Catch them 并查集
DescriptionThe police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to i原创 2014-07-14 16:46:17 · 610 阅读 · 0 评论 -
HDU 2087 剪花布条 KMP入门
Problem Description一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长原创 2014-07-19 16:12:29 · 1183 阅读 · 0 评论 -
poj2524 Ubiquitous Religions 并查集入门
DescriptionThere are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your un原创 2014-07-14 10:15:48 · 707 阅读 · 0 评论 -
POJ 2513 Colored Sticks 欧拉路的判断+字典树
题目链接:poj2513题意:给定一捆木棍。每根木棍的每个端点涂有某种颜色。问:是否能将这些棍子首尾相连,排成一条直线,且相邻两根棍子的连接处端点的颜色一样。输入描述:输入文件中包含若干行,每行为两个单词,用空格隔开,表示一根棍子两个端点的颜色。表示颜色的单词由小写字母组成,长度不超过10 个字符。木棍的数目不超过250000。输出描述:如果木棍原创 2015-05-13 17:18:45 · 919 阅读 · 0 评论 -
hihocoder 1067 最近公共祖先·二 并查集+stl
题目链接:hihocoder1067题解思路:面对10^5个 名字和10^5条询问,肯定要用到特殊的方法:1.把所有的询问先存下来,然后再遍历一次整棵树得到所有答案2.遍历的过程中 查询含当前节点的 所有询问,然后找到询问中的另一个节点;查看另一个节点的状态。 如果另一个节点未访问过,接下来处理;原创 2015-05-27 10:05:00 · 1570 阅读 · 0 评论 -
hihocodr1055 刷油漆 树上的背包
题目链接:hihocoder1055题解思路:这道题要用到动态规划中的背包可以把 涂漆节点的个数 理解为背包容量 ,则每个节点的重量为1dp[a][b] 表示包含a(根节点)的共b个节点的最大权值然后通过后序遍历从下往上先求得子节点的最大权值,依次向上背包最后得到的dp[1][v]则为答案原创 2015-05-26 18:06:16 · 1137 阅读 · 0 评论 -
HDU 2222 Keywords Search AC自动机模板
题目链接:hdu2222代码:#include#include#include#include#includeusing namespace std;struct node{ int sum; node* fail; node* next[26]; node() { s原创 2015-06-16 21:13:18 · 660 阅读 · 0 评论 -
HDU5233 Gunner II 离散化的各种方法
题目链接:HDU5233题意:n棵树依次排好,每棵树都有一个高度,树的顶端有一只鸟。猎人会打M枪,每一枪都能从高度为X的树上打下一只鸟,问每一枪打下的鸟是从 编号多少的树 上掉下来的题解思路:因为树的高度能达到(10^9) 而树的数量最多10^5 所以离散化 将所有高度为X的树离散化为 高度为第X高的树有多种方法原创 2015-05-24 19:52:11 · 1151 阅读 · 0 评论 -
hihocoder 1032 最长回文子串
题目链接:hihocoder 1032代码:#include#include#includeusing namespace std;char str[1000105];int fast(){ int start,endd,len,ans=0; for(int i=1;str[i];i++) { st原创 2015-05-25 17:11:47 · 1041 阅读 · 0 评论 -
RMQ 算法入门
1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。2.RMQ算法对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量非常大原创 2015-06-10 16:20:41 · 751 阅读 · 0 评论 -
hihocoder 1014 Trie树 字典树
题目链接:hihocoder 1014代码:#include#include#includeusing namespace std;struct node{ int ans; node* next[26]; node() { ans=1; for(int ii=0;ii<26;ii++)原创 2015-05-25 17:53:40 · 736 阅读 · 0 评论 -
PAT 09-散列3. Hashing - Hard Version (30)
题目链接:Hashing-Hard Version解题思路:暴力,首先根据题目要求将所有给出节点按字典序(从小到大)排列循环S(节点总数)次,每次通过遍历数组找到一个未出现过的,且满足条件:只能出现在现有位置上(本可出现在之前位置,但被其他节点占据)的节点输出节点的值 并标记为出现过即可得到答案代码:#includ原创 2015-05-12 16:10:05 · 1441 阅读 · 0 评论 -
Pat 04-树6. Huffman Codes (30)
题目链接:Huffman codes 题意:先给出N个节点的出现次数 再给出M种编码方式 判断每种编码方式是否能构成哈夫曼树 题解:判断哈夫曼编码的条件有两个:1 哈夫曼编码不唯一,但它的WPL(带权路径长度)一定唯一2 短码不能是长码的前缀 首先可以使用STL优先队列 根据 WPL=所有非叶节点的权值之和 求出原创 2015-05-08 17:53:39 · 1736 阅读 · 2 评论 -
深入理解红黑树
本文参考:I、 The Art of Computer Programming Volume III、 Introduction to Algorithms, Second EditionIII、The Annotated STL SourcesIV、 WikipediaV、 Algorithms In C Third EditionVI、 本人写的关于红黑树的前三转载 2016-10-04 11:56:48 · 1302 阅读 · 0 评论