数据结构与算法
逝不等琴生
你必须暗自努力,才能显得轻松如意
展开
-
二叉树遍历
前言 传送门 正文 题目描述 二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。 输入描述: 两个字符串,其长度n均小于等于26。 第一行为前序遍历,第二行为中序遍历。 二叉树中的结点名称以大写字母表示:A原创 2020-07-17 11:40:34 · 159 阅读 · 0 评论 -
八皇后问题
前言 传送门 正文 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将 8 个皇后放在棋盘上(有8×8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即 a=b1b2…b8, 其中bi(1≤bi≤8)为相应摆法中第 i 行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数n,要求输出第n个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。 输原创 2020-07-17 11:10:35 · 147 阅读 · 0 评论 -
BFS模板题——迷宫
前言 BFS模板题 正文 【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。 对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫的方式原创 2020-07-04 11:29:27 · 387 阅读 · 0 评论 -
k倍区间(前缀和+组合)
前言 传送门 正文 问题描述 给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。 你能求出数列中总共有多少个K倍区间吗? 输入格式 第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai。(1 <= Ai <= 100000) 输出格式 输出一个整数,代表K倍区间的数目。 样例输入 5 2 1 2原创 2020-07-04 00:05:13 · 584 阅读 · 0 评论 -
BFS模板题——长草
/* 在做算法题时,使用cin和cout在数据量很大时容易造成超时的情况。此时输入输出需要改为使用scanf和printf。下面的代码可节省时间,增强cin和cout的效率。 */ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ...原创 2020-07-03 16:08:42 · 376 阅读 · 0 评论 -
(转)结构体赋值的问题
C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。 例如: char a[10] = "123"; /*正确,在定义的时候初始化*/ char a[10]; a = "123"; /*错误,不能用“=”直接为字符数组赋值*/ strcpy(a, "123"); /*正确,使用strcpy函数复制字符串*/ 所以要对game[0][0].cpart赋值应该用strcpy(game[0]转载 2020-07-03 11:11:18 · 636 阅读 · 0 评论 -
sscanf和sprintf详解
前言 sscanf和sprintf在处理字符串问题上很有用!(sscanf和sprintf可以从字面意思上分别理解为string+scanf和string+printf,均在头文件stdio.h下)。 正文 简单举例 /* sscanf与sprintf sscanf(str,"%d",&n) 其实就是把str的内容以"%d"的格式写入到n中(从左到右) 同理 sprintf(str,"%d",n)就是把n以"%d"的格式写入到str (从右到左) */ #include<cstdio>原创 2020-07-02 17:35:34 · 2574 阅读 · 0 评论 -
(转)我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量?
我们用一个等臂天平来称物体的质量,如果我们要称的物体质量范围在1到40克(整数),请问我们最少需要几块砝码可以完成这项物体质量的称量? A: 3 B: 4 C: 5 D: 6 E: 7 答案:B 4块 思路一: 从1开始:缺少1,+1(需要重量为1的砝码) 2:缺2,但是前面最大可能满足的元素为1,所以下个砝码可以为3(3-1=2) 3: 4: 5:缺5,而前面的砝码可以最大表示4,所以为了满足5,下个砝码可以为4+5=9(尽可能稀疏) OK,现在我们前两个砝码可以表示范围为1-4;所以《9-4,9+4》转载 2020-07-02 15:46:39 · 592 阅读 · 0 评论 -
蓝桥杯练习——完美的代价
前言 传送门,文章思路参考自柳神博客——https://blog.csdn.net/liuchuo/article/details/51990430 正文 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一...原创 2020-03-24 22:08:13 · 279 阅读 · 2 评论 -
蓝桥杯练习——矩阵乘法
前言 传送门 这里要用到一些数学知识,任意一个非零方阵的零次方是单位矩阵,任意一个非零方阵的一次方是它本身。M次幂,只需要矩阵A相乘M-1次,注意每次矩阵相乘的结果存放到一个中间矩阵temp数组中,这样做是防止直接更新res数组后,对后面值计算的影响,故等到将整个矩阵计算出结果后,再把temp数组重新赋值给res数组,用于下一次矩阵相乘 正文 问题描述 给定一个N阶矩阵A,输出A的M次幂(M是非...原创 2020-03-24 17:28:34 · 408 阅读 · 0 评论 -
蓝桥杯练习——16进制转8进制
前言 传送门 起初想先将16进制转为10进制再转为8进制,发现题目中16进制数长度可达100000,即使是long long类型,范围也没那么大,于是准备将16进制转为2进制,再将2进制转为8进制。 16进制转2进制,就每一位16进制数转为4位2进制数即可,用一个string变量存储转换后的2进制数,再对这个string变量,每三位做一组,转换为一位8进制数即可,值得注意的是题目要求输出的8进制不...原创 2020-03-23 11:11:03 · 334 阅读 · 1 评论 -
L1-009 N个数求和(解决测试点三错误)
前言 原题传送门 这题之前我一直是17分,卡在测试点三,我是先求得所有分母的最小公倍数,然后将分子相加后,再对结果的分子和分母进行约分。后来想了想,这样做的话,分子,分母可能会超过long long的范围。因此我采取先将前两个分数相加后,把它们的结果先进行约分,然后再与下一个分数进行相加。 正文 本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和...原创 2020-02-16 14:30:05 · 2622 阅读 · 0 评论 -
并查集详解 ——图文解说,简单易懂(转)
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?) 来看一个实例,HDU1232畅通工程 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你...转载 2020-02-13 21:19:08 · 205 阅读 · 0 评论 -
实验二 不带头结点的单链表
前言 熟练掌握动态链表结构及有关算法的设计方法 头文件 #include <stdio.h> #include <stdlib.h> /* 链表实现的头文件,文件名slnklist.h */ typedef int datatype; typedef struct link_node{ datatype info; struct link_node *ne...原创 2018-11-27 11:05:35 · 1471 阅读 · 0 评论 -
实验三 带头节点的单链表
前言 熟练掌握带头节点的单链表的相关操作, 头文件 #include <stdio.h> #include <stdlib.h> /**************************************/ /* 链表实现的头文件,文件名slnklist2.h */ /**************************************/ typedef int...原创 2018-12-06 21:44:55 · 2816 阅读 · 0 评论 -
蓝桥杯-算法训练 最大最小公倍数
前言 记录一下自己刚入门算法时所遇到的一些"无从下手"题 题目 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 504 数据规模与约定 1 <= N <= 106。 解析 三个数互质时最小的公倍数最大 根据数论知识:任意大于1的两个相...原创 2019-02-21 15:34:32 · 440 阅读 · 0 评论 -
快速排序
前言 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:...原创 2019-02-28 20:28:57 · 234 阅读 · 0 评论 -
HDU-ACM2007:平方和与立方和
前言 最近开始刷ACM题,由此希望记录下自己的学习过程,话不多说,上题 Problem Description 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。 Input 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。 Output 对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的...原创 2019-02-28 23:56:10 · 230 阅读 · 0 评论 -
《算法笔记》3.1小节——入门模拟->简单模拟
前言 算是记录一下刷题的过程吧,也巩固总结一下。 这是算法笔记配套习题集的练习,链接:http://codeup.cn/contest.php?cid=100000575 整理下今上午刚做的这一小节的题,以下代码均已通过测试。 正文 问题 A: 剩下的树 题目描述 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点...原创 2019-07-18 15:43:54 · 320 阅读 · 0 评论 -
《算法笔记》3.2小节——入门模拟->查找元素
前言 练习题链接:http://codeup.cn/contest.php?cid=100000576 正文 问题 A: 统计同成绩学生人数 题目描述 读入N名学生的成绩,将获得某一给定分数的学生人数输出。 输入 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔。 第3行:给定分数 当读到N=0时输入结束。其中N不超过1000,成绩...原创 2019-07-19 16:03:02 · 212 阅读 · 0 评论 -
实验一:线性表的顺序实现
前言 很快期末了,准备把数据结构的写过的实验汇总一波,也相当于复习一下了。 (以下代码均通过验证,可以达到实验要求) 头文件内容 #include <stdio.h> #include <stdlib.h> /**********************************/ /*顺序表的头文件,文件名sequlist.h*/ /******************...原创 2018-11-27 10:12:45 · 3112 阅读 · 0 评论