![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
ITNXD
个人博客:https://itnxd.eu.org/
手机号:18834389004 QQ:158903258
展开
-
链式前向星(模板)
链式前向星和邻接表一样,只是存储方式变成了数组!head数组存储最后插入该链表的边的编号,每条边插入都是在该链表的表头插入,然后head前移指向当前新边(即当前编号tot),新节点指向原来的头结点!Next数组相当于邻接表的Next指针,存储指向同起点的另一条边的编号;edge数组存储当前边编号对应的边的终点!注意:next不能使用,会和系统变量冲突,,使用Next或ne无向图需要存储两次,反向正向都是路径有向图只需要存储一次tot从0和1开始都可以,他只是影响边的编号,我们不在意,边的编号一原创 2020-07-20 09:54:47 · 602 阅读 · 0 评论 -
P1019 单词接龙(字符串 DFS 回溯)
题的链接:P1019 单词接龙题解:相邻部分不能有包含关系,有歧义。。。例如,as 和 asdf, 后面不能包含前面,但是前面能包含后面,并且若前后相同例如 elve 和 elve 则是可以连接的。这样解决包含问题: if(b.find(a) != string::npos && b != a) return false;最复杂就是这里:判断能否连接,用for循环从...原创 2019-11-21 11:04:53 · 290 阅读 · 0 评论 -
问题 1531: [蓝桥杯][算法提高VIP]数的划分(搜索+剪枝+记忆化搜索DFS 动态规划DP)
题的链接:问题 1531: [蓝桥杯][算法提高VIP]数的划分重点: dfs判重:保存上一次值,下一次循环时要小于上一次值就行,即最后序列是一个递减序列;或者下一次循环大于上一次值,即最后序列是一个递增序列。参考代码1.0: 比较笨,通过位数构造序列,最后判断是不是n的大小。。。超时代码!!!#include <string>#include <cstdio>#...原创 2019-11-15 14:40:18 · 343 阅读 · 0 评论 -
P1219 八皇后(DFS 回溯)
题目链接:P1219 八皇后题解: 就是一道DFS搜索加回溯,关键就是判断横纵对角线有没有值;可以直接for循环循环地图判断,如代码1.0,但会超时;所以最好用2.0直接将对角线和横纵弄到一个数组,如2.0的图示;输出时可以判断前三个输出,并不一定要保存下来,如3.0所示;以前的题解:点击这里!知识点: 对角线的判断可以 i + j 和 i - j + N 进行判断,如图所示。参考代码1.0...原创 2019-11-04 21:56:55 · 167 阅读 · 0 评论 -
P1177 【模板】快速排序(排序)
题的链接:P1177 【模板】快速排序参考代码1.0: STL 的 sort一遍过#include <string>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int N;int str[100010];int main(...原创 2019-11-03 22:13:40 · 364 阅读 · 0 评论 -
P1781 宇宙总统(高精度 排序 字符串)
题的链接:P1781 宇宙总统题解: 不需要用到高精度,可以直接用string来比较,比较函数cmp写出来就行;参考代码:#include <vector>#include <string>#include <iostream>#include <algorithm>using namespace std;int N, s, pos...原创 2019-11-02 17:42:22 · 270 阅读 · 0 评论 -
P1068 分数线划定(结构体 排序)
题的链接:P1068 分数线划定题解: 先对数据排序,分数相同,学号小的在前,否则分数大的在前;用res标记是否到达限定的人数,pos标记总共取了多少人;当res到达限定res后就去判断后序的人和上一个人的分数是否相同,相同则保存,pos++,否则break;最后输出即可;参考代码:#include <string>#include <iostream>#incl...原创 2019-11-02 16:34:32 · 252 阅读 · 0 评论 -
P1059 明明的随机数(排序 标记 set)
题目链接:P1059 明明的随机数题解: 标记一下就行,注意vis数组要大点,数字可能不只是三位数;参考代码:#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define INF 0x3f...原创 2019-11-02 12:46:02 · 116 阅读 · 0 评论 -
P3952 时间复杂度(字符串 模拟 栈)
题的链接:P3952 时间复杂度题解: 还是看一下上一次写的题解吧,for循环和E的匹配相当于括号匹配,用到栈的结构。点击这里!注意点:输入一行用getline,若前面输入用了cin,要用getchar来接收一下空格;本题的次数小于100,并非1位,所以用substr不能substr(t + 1,1)这样,应该substr(t + 1)这样;栈的存储建议从1开始。每次输入一行for循...原创 2019-11-02 11:17:15 · 167 阅读 · 0 评论 -
P1012 拼数(字符串 排序)
题的链接:P1012 拼数注意点:直接从大到小排是不对的:如(321 32 出现 32132 > 32321的情况);参考代码1.0: 就是字符串的排序,大的在前,输出即可,但是不能直接排,以防出现(321 32 出现 32132 > 32321的情况),可以用a + b > b + a来保证关系的正确性!!!#include <string>#incl...原创 2019-10-31 23:26:17 · 139 阅读 · 0 评论 -
P1071 潜伏者(字符串 结构体)
题目链接:P1071 潜伏者题解:注意点:加密信息的字母要都在原信息中出现;有没有出现的输出Failed;原信息或加密信息必须都出现26个字母;小于26个字母输出Failed;每个字母只能一一对应,不能出现多对一或一对多的情况;出现了则输出Failed;解释:用一个结构体或pair类型来存储一一对应的字母,方便由加密信息来找原字母;查找原信息中是否存在加密字母可以用for循环来,也...原创 2019-10-31 16:44:42 · 284 阅读 · 0 评论 -
P1603 斯诺登的密码(字符串 排序)
题的链接:P1603 斯诺登的密码题解: 先将题目的数字字符串保存,再将数字字符串对应的数字的平方后对100取余的结果一一对应的保存到int型数组;然后在输入的时候去判断是不是出现了数字,出现了数字则将数字存到另一个数组,然后将其排序,从小到大;最后输出,输出最小的一个数,即直接将排好序的全部输出即可;细节:第一位不能是0,是0的直接跳过;后面的如果是一位数,要有前导0,eg: 09;可...原创 2019-10-30 23:20:11 · 436 阅读 · 0 评论 -
P1098 字符串的展开(模拟 细节)
题目链接:P1098 字符串的展开题解: 简单题,细节注意好就行。首先:只有 - 左右都是数字或都是字母才进行拓展,左右相等或右小于左直接输出 - ;其次:进行分情况讨论,p1==2时,即大写时,要讨论是数字还是字母,字母-32,数字不需要,注意这个关键点就行。最后:输出 * 号时,重复数也要考虑进去;参考代码:#include <string>#include <cst...原创 2019-10-26 23:11:00 · 246 阅读 · 0 评论 -
P1086 花生采摘(模拟)
题目链接:P1086 花生采摘题解: 每次都采摘剩下的最大值,所以每次只需要扫描一遍最大值,找到后判断采摘了当前花生剩余的市价能否回去即可;具体操作: 1、先判断第一个最大值能否采到,即第一个的横坐标 * 2 + 1 与K的关系,若大于K,则说明第一个也采不到,即最大采摘数为0,输出即可;2、判断之后的最大值,若最大值为0,退出循环,否则就判断此时最大值与上一个最大值的距离,即两点之间的距离公...原创 2019-10-26 21:41:09 · 220 阅读 · 0 评论 -
P1042 乒乓球(模拟 细节 坑爹)
题目链接: P1042 乒乓球题解: 输入一个判断一个,累计W 和 L 的数据,11制要保证在有人达到11分的情况下两者分差大于等于2才行;21分制一样;即可以这样写:(两种都对) if((W >= 11 && W - L >= 2) || (L >= 11 && L - W >= 2)) if((W >= 11 ...原创 2019-10-26 20:30:48 · 556 阅读 · 1 评论 -
P1031 均分纸牌(模拟 减平均值)
题目链接:P1031 均分纸牌题解: 先求平均值,将牌数变为相对平均值的数,即每一位都减去平均值,再扫描每一位数,若为0,直接跳过;否则后一项加前一项,(若前一项为正,即将前一堆给了后一堆,否则就是向后一项借缺少的数),此时计数器++即可。本人走的歪路:题看错了,忘了移动的限制,不能随便移动,所以进行了排序,。。。而且还不太对。此题:减平均数,变为相对值,最后只需判断非零值即可,前一项的变化...原创 2019-10-23 22:17:26 · 184 阅读 · 0 评论 -
二叉树前中序变后序(高级方法)
不太好懂,多看看:distance 和 find 两个函数的用法:都是algorithm库的函数 distance //用法:参数(地址,地址) 返回值为长度 template<class InputIterator> typename iterator_traits<InputIterator>::difference_type dist...原创 2019-07-10 18:42:12 · 216 阅读 · 0 评论 -
P1601 A+B Problem(高精)
题的链接:点击这里!题目背景无题目描述高精度加法,相当于a+b problem,不用考虑负数.输入格式分两行输入。a,b<=10^500输出格式输出只有一行,代表a+b的值输入输出样例输入 #1复制11输出 #1复制2题解: 建议参考我之前博客,点击这里,高精度模板!==注意:==输入用string,再倒序存到vector里;参考代码:#include &...原创 2019-10-03 20:43:10 · 235 阅读 · 0 评论 -
P2142 高精度减法
题的链接:点击这里!题目描述高精度减法输入格式两个整数a,b(第二个可能比第一个大)输出格式结果(是负数要输出负号)输入输出样例输入 #1复制21输出 #1复制1说明/提示20%数据a,b在long long范围内100%数据0 < a,b < 10^10086题解: 参考我之前的博客,高精度模板!点击这里!注意: 可能A < B,所以用cmp函...原创 2019-10-03 21:14:11 · 292 阅读 · 0 评论 -
P1303 A*B Problem
题的链接:点击这里!题目描述求两数的积。输入格式两行,两个数。输出格式积输入输出样例输入 #1复制12输出 #1复制2说明/提示每个数字不超过10^2000,需用高精图解: 先错位存储积,将同一个位置积都加起来,无论多少行,最后对其进行进位操作,每位只保留一位数,多出来的都加到下一位。再判断一下末尾是否有0,有0都删掉,当然最后一定要不小于1位数。最后倒序输出;C[i...原创 2019-10-04 11:11:10 · 173 阅读 · 0 评论 -
P1255 数楼梯(高精度加法 + 斐波那契)
题的链接:P1255 数楼梯题目描述楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。编一个程序,计算共有多少种不同的走法。输入格式一个数字,楼梯数。输出格式走的方式几种。输入输出样例输入 #1复制4输出 #1复制5说明/提示60% N<=50100% N<=5000)题解: 就是斐波那契数列的变形,n = 1,s = 1;n = 2,s = 2 ; n...原创 2019-10-04 17:47:11 · 780 阅读 · 0 评论 -
P1604 B进制星球(高精度加法变形)
题的链接:P1604 B进制星球题目背景进制题目,而且还是个计算器~~题目描述话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。输...原创 2019-10-04 18:55:54 · 190 阅读 · 0 评论 -
P1003 铺地毯(模拟)
题的链接:P1003 铺地毯题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯...原创 2019-10-04 23:42:17 · 144 阅读 · 0 评论 -
P1067 多项式输出(模拟 特判 细节)
题的链接:P1067 多项式输出题解: 1、考虑符号 i = N 和非N的特判;2、考虑数字 i = 0 和 1 的特判;剩下的就是最正常的输出了。参考代码:#include <vector>#include <cstdio>#include <string>#include <cstring>#include <iostream...原创 2019-10-05 11:39:00 · 95 阅读 · 0 评论 -
P1540 机器翻译(队列 数组模拟)
题的链接:P1540 机器翻译,点击这里!注意:查找队列是否有该元素,用一个vis数组标记一下就好,不用太复杂去循环队列去找。。。参考代码1.0: STL的queue + vis标记实现#include <queue>#include <cstdio>#include <string>#include <cstring>#include...原创 2019-10-05 14:19:12 · 324 阅读 · 0 评论 -
P1056 排座椅(贪心 排序 经典)
题的链接:P1056 排座椅题解: 题目说输出最好的方案,说明方案不止一种,要输出每条切割线切得人最多的线,所以就是典型的贪心,先统计要切割线路的次数,再输出前K或L个元素(输出按照行列号从小到大输出)就行。首先说明一个问题:给出的K和L是切割线的一部分,也就是所有切割线按从大到小排完序的行前K,列前L个;这样还不行,输出必须输出所切割行下标或列下标要从小到大输出,所以还得对要输出的前K或L个...原创 2019-10-06 12:02:13 · 289 阅读 · 0 评论 -
P1328 生活大爆炸版石头剪刀布(模拟)
题的链接:P1328 生活大爆炸版石头剪刀布题解: 这题不难,但一定要细心,关于周期循环直接 ta = (ta + 1) % Na; tb = (tb + 1) % Nb; 就行,细节:从-1 开始,第一个进去的是0就对了;参考代码1.0: 有点烦。。。 建议参考2.0的简化代码,还不容易错。#include <queue>#include <cstdio>#in...原创 2019-10-06 14:04:17 · 127 阅读 · 0 评论 -
P1563 玩具谜题(模拟)
题的链接:P1563 玩具谜题题解: 四种情况(具体两种),即顺时针还是逆时针;以防止b太大,我用了while循环,(题目好像 b 并不大);参考代码1.0: res从1开始的。。。#include <queue>#include <cstdio>#include <string>#include <cstring>#include ...原创 2019-10-06 18:38:53 · 119 阅读 · 0 评论 -
P1217 [USACO1.5]回文质数 Prime Palindromes(质数 回文数)
题的链接:P1217 [USACO1.5]回文质数 Prime Palindromes知识点:偶数位数回文数(除11)必定不是质数(自行百度)打表流程: 暴力输出最大范围内所有答案,按空格隔开,最后用软件将空格全部替换为‘,’即可;再按条件输出。参考代码1.0: 最后一个数据点超时,直接打表暴力通过AC,哈哈哈!#include <queue>#include <cst...原创 2019-10-06 21:32:33 · 273 阅读 · 0 评论 -
P1449 后缀表达式(栈的应用)
题的链接:点击这里!题目描述所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。输入格式输入:后缀表达式输出格式输出:表达式的值输入输出样例输入 #1复...原创 2019-10-03 14:14:27 · 375 阅读 · 0 评论 -
基数排序(数组实现 低位优先)
注意:1、数组实现有点浪费空间,但是好在写起来简单;2、num数组记录桶内元素个数,循环一次初始化一次;3、T为桶,也就是临时数组,最后倒回原数组,在下一次循环初始化实现原理:先按个位排序,放到对应的个位数的桶内,再将桶内元素按照0~9放回原数组;再按照十位,放到对应十位数的桶内,直到排到最大数的最高位结束;即排好了最终序列。为稳定排序时间复杂度:线性的;更清楚的解释:建议参考该博客...原创 2019-10-01 15:06:45 · 923 阅读 · 0 评论 -
快速排序(快排 递归实现)
时间复杂度:O(NlogN)注意:(1)时间复杂度与pivot的选取有关,最好能选到正中间;(2)该排序不是稳定排序代码1.0:不用swap函数(相较2.0节省时间)int qSort(int L, int R){ //基准取第一个数 int pivot = S[L]; while(L < R) { while(L < R &...原创 2019-09-30 18:57:25 · 384 阅读 · 0 评论 -
图的邻接表表示法
图的邻接表表示法#include <cstdio>#include <string>#include <iostream>#include <algorithm>#define MaxVertexNum 1010#define INF (1<<31)-1using namespace std;//图的邻接矩阵表示法...原创 2019-09-08 12:02:15 · 494 阅读 · 0 评论 -
图的邻接矩阵表示法
图的邻接矩阵表示法#include <cstdio>#include <string>#include <iostream>#include <algorithm>#define MaxVertexNum 1010#define INF (1<<31)-1using namespace std;//图的邻接矩阵表示法...原创 2019-09-08 10:04:12 · 464 阅读 · 0 评论 -
哈夫曼树的创建
带权路径长度(WPL): : 设二叉树有n 个叶子结点 ,每个叶子结点带有权值Wk 为 ,从根结点到每个叶子结点的长度为 Lk ,则每个叶子结点的带权路径长度之和就是: 待定:还没有搞清楚最小堆的结构如何定义//哈夫曼树结构typedef struct HNode{ int Weight; //权值 HNode *Left, *Right;}*HuffmanTr...原创 2019-09-03 21:13:55 · 171 阅读 · 0 评论 -
堆的初始化,创建,插入,删除以及乱序输入的调整
注意:元素从下标为1开始存储,下标为0,存储最大值,用做哨兵;#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MAXDATA =...原创 2019-09-23 22:36:01 · 306 阅读 · 0 评论 -
平衡二叉树的建立与调节(AVL树)
左-左变化:A左B右AVLTree B = A->Left;A->Left = B->Right;B->Right = A;//右-右 变化:A左B右AVLTree LeftRotation ( AVLTree A ){ /* 注意:A必须有一个左子结点B */ /* 将A与B做左单旋,更新A与B的高度,返回新的根结点B */ AVL...原创 2019-07-22 12:33:22 · 193 阅读 · 0 评论 -
二叉树插入删除查找递归及非递归的实现
二叉树建树、插入、删除、查找最大最小值、查找特定值的递归及非递归实现。注意:一定要先建二叉树,必须要有一个开辟了内存空间的节点作为头结点(并且赋了值)!!!#include <iostream>#include <cstdio>#include <string>#include <vector>#include <queue>...原创 2019-07-21 14:40:35 · 541 阅读 · 0 评论 -
二叉树的前中后序遍历的实现(链式存储 非递归实现)
简单解释:前序遍历:需要先输出栈顶,再把左子树压入直到左儿子为空,删除栈顶,转向右儿子,继续下一次循环输出栈顶。。。中序遍历:与前序遍历相似,先将左子树压入栈中,输出当前栈顶,删除栈顶,转向右子树,继续下一次循环压入左子树。。。后序遍历:略微复杂,因为输出根节点时需要知道上次输出的节点是左子树还是右子树:1、若为左子树,需要将右子树压入栈中才能访问当前跟节点。2、若为右子树,可以直接...原创 2019-07-10 17:26:10 · 362 阅读 · 0 评论 -
二叉树的表达(打印各个节点的详细信息)
给定n,接下来n行每行给出一组节点编号 左子节点编号 右子节点编号 没有子节点用-1表示输出每个节点的编号,父节点编号,兄弟节点编号,子节点数,深度,高,以及接节点类型例如:关键看:二叉树的存储,高度和深度的递归解决流程#include <iostream>#include <cstdio>#include <string>#include &...原创 2019-06-28 14:39:28 · 445 阅读 · 0 评论