![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
机试
孱弱Lynch
这个作者很懒,什么都没留下…
展开
-
2017计算机学科夏令营上机考试B:编码字符串(字符串)
思路分析遍历字符串,将大写字母变为小写字母。(a=A+32)定义字符型vector 和整型vector,分别存放字符及其对应的字符个数。遍历字符串,当相邻字符不同时,向vector中添加元素。要记得将没有字符可以比较的最后一组字符额外加入到vector中。代码#include <iostream>#include <cstdio>#include <...原创 2019-03-29 15:03:00 · 264 阅读 · 0 评论 -
2016计算机学科夏令营上机考试B:单词翻转(字符串操作——栈的应用)
思路分析读入字符串,遇到非空格字符时,将字符依次入栈,遇到空格字符时,将字符依次出栈。最后若栈非空,将元素依次出栈,直至栈空。注:利用STL中的stack,可以非常便捷地实现栈操作。我分别利用STL和数组实现了上述的栈操作,很鲜明地对比出难易程度。代码——STL#include <iostream>#include <cstring>#include <...原创 2019-04-02 16:51:40 · 197 阅读 · 0 评论 -
2016计算机学科夏令营上机考试A:分段函数(printf格式控制)
思路分析这题。。。不多说了。。重点在printf的控制输出吧,浮点数计算过程当中,最好将整数写成浮点数形式。3->3.0代码#include <iostream>#include <cstdio>#include <cmath>using namespace std;int main(){ double n, ans; ...原创 2019-04-02 17:11:00 · 169 阅读 · 0 评论 -
2015计算机学科夏令营上机考试G:The Game(DFS+回溯——全路径最优解)
题目大意模拟 “连连看” 游戏。从给定的某‘X’位置移动到另一给定‘X’位置,要求路径直线数量最少,等价于转弯次数最少。思路分析这题很明显是一道搜索类的题目。看到这题时,我的第一反应是,那道用优先队列的BFS的题目。但是这两题应该是完全不同的思路:使用优先队列BFS的题目中,不同结点的搜索代价是存在差异的,因而可以使用优先队列对优先搜索方向进行约束;而本题中往四个方向搜索的代价...原创 2019-04-11 19:08:06 · 283 阅读 · 0 评论 -
2018计算机学科夏令营上机考试F:Tram(图最短路径——Dijkstra)
题目大意说真的,到现在我都觉得我自己不能get到题目的真正含义,是我太蠢了。看网上各路大佬神仙的帖子,得知该题的本意是:每个节点的第一个连接点不需要旋转,而其他连接点则需要旋转1次。思路分析理解题意后,在连接矩阵的构建过程当中,不需要旋转的路径设置为0,需要旋转的路径设置为1,不可达的路径为INF。之后利用任意一种最短路径方法便可以求得结果,我选择的是Dijkstra算法。注意: d[...原创 2019-04-02 20:21:09 · 373 阅读 · 0 评论 -
2018计算机学科夏令营上机考试D:Euro Efficiency(完全背包——两次dp)
题目大意给定任意数量6种金额的钱币,包含付钱和找钱两个过程,分别寻找支付[1, 100]所涉及到的最小钱币种类。计算上述所得种类的平均值和最大值。思路分析本题给出的所有类型钱币数量任选,且要正好等于所给数值,因而是正好相等的完全背包问题。但本题不仅仅有付钱的“+”的过程,还有找钱的“-”的过程,因而需要两次dp。注意点因为可以有“-”的过程,所以付钱的总和上限不止100,要开大一些...原创 2019-04-02 20:55:57 · 606 阅读 · 0 评论 -
字符串处理专题(持续更新)
字符串输入格式开文第一篇,想先捋一下字符串输入的形式与方法。各路大神已经总结的很多了,我就归纳一下自己常用的方法,自给自足了。字符串存储可以使用char* 或者string类型,输入时要注意需要存储的字符串是否包含空格。#include <iostream>#include <cstdio>#include <cstring>#include <...原创 2019-04-15 23:37:34 · 156 阅读 · 0 评论 -
2015计算机学科夏令营上机考试I:Risk(多源图最短路径——Floyd)
题目大意告诉20个点之间的连通情况,求任意两点间的最短距离。思路分析本题为图的最短路径问题,可以想到用Dijkstra算法、Floyd算法。Dijkstra算法解决单源最短路径问题,Floyd算法解决多源最短路径问题,故本题选择Floyd算法。代码#include <iostream>#include <cstdio>#include <algor...原创 2019-04-09 20:53:45 · 229 阅读 · 0 评论 -
2015计算机学科夏令营上机考试E:Simple prefix compression(字符串处理)
题目大意字符串压缩——下一字符串与其相邻的上一字符串相比较,如果具有相同的字符串首部,用该首部的长度(一个数字)替代该子串;如果没有相同的字符串首部,也要在首部加上一个‘0’。要求输出最终压缩后,所有字符串长度之和。思路分析利用两层循环,外层循环字符串,内层计算压缩后的长度,进行累加。代码#include <iostream>#include <algorithm&...原创 2019-04-09 21:02:57 · 140 阅读 · 0 评论 -
2014计算机学科夏令营上机考试F:Battle City(改进的BFS——优先队列)
题目大意'Y’为起点,'T’为终点,'S’和’R’不可搜索,'E’为消耗为1的路径,'B’为消耗为2的路径。要求从起点到终点的消耗最小。思路分析本题看来就是一道典型的BFS问题,遍历到终点的层次就是路径的消耗。但由于路径上存在不同消耗的路径,此时队列中的每个元素并不是都等价,由于希望最后到达终点的层次最小,所以每次从队列中希望取出层次最小的结点。所以不能用模板中的队列queue来存储...原创 2019-04-09 21:15:22 · 246 阅读 · 1 评论 -
2014计算机学科夏令营上机考试H:Binary Tree(数学规律)
题目大意模拟一颗二叉树,根结点为(1,1)。对任意结点(a,b),左孩子结点为(a+b,b),右孩子结点为(a,a+b)。现给出一结点,判断该结点是从根结点分别向左、向右几次分支得到的。思路分析方法一: 逆向考虑。对于结点(a,b),若a>b,则该结点为左孩子结点,父亲结点为(a-b,b);否则为右孩子结点,父亲结点为(a,b-a)。则从该结点向上遍历,直至根结点(1,1)。但很...原创 2019-04-09 21:39:31 · 213 阅读 · 0 评论 -
2014计算机学科夏令营上机考试G:Charm Bracelet(0-1背包)
题目大意规定W的上限为m,要求在满足W的前提下,使选择的物品D之和最大,每件物品只能拿一次。思路分析这是一道不要求完全取尽“0-1背包”的模板题。知识归纳一、完全取尽 or 不完全取尽完全取尽:/*INF: 当要求最小值时,INF为最大的正整数——0x7fffffff; 当要求最大值时,INF为最小的负整数——0xffffffff;*/void init(){...原创 2019-04-13 13:36:23 · 132 阅读 · 0 评论 -
二分算法(持续更新)
有序序列查找针对有序序列的查找问题,主要有二分法、哈希表法等方法,归纳如下:一、二分法二分法可以作为某几类问题的通用解法:有序序列中是否存在满足某条件的元素;有序序列中第一个满足某条件的元素的位置;有序序列中最后一个满足某条件的元素的位置。1. 有序序列中是否存在满足某条件的元素:eg. 查找一个严格递增序列中是否存在给定的数 x,存在返回下标序号,不存在返回 -1/*le...原创 2019-05-01 23:50:56 · 2790 阅读 · 0 评论 -
贪心算法(持续更新)
贪心算法思想:贪心算法的每一步都有严格的证明过程,但我们肯定无法证明过后再去做题。因而,如果在想到某个似乎可行的策略,并且自己无法举出反例,那么就勇敢地实现它。eg1. 区间不相交问题——给出N个开区间(x,y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。//先选择左端点最大的区间,若左端点相同选右端点最小的区间,保证所选区间尽可能离散。#include <iostrea...原创 2019-05-27 09:19:36 · 565 阅读 · 0 评论 -
双指针算法(持续更新)
双指针算法(Two Pointers)算法思想: 利用问题本身与序列的特性(序列递增性质),使用两个下标i、j对序列进行扫描 (可以同向扫描,也可以反向扫描) ,以较低的复杂度解决问题。eg1. 给定一个递增的正整数序列和一个正整数M,求序列中不同位置的数a和b,是的它们的和恰好为M,输出所有满足条件的方案。// 两个指针反向扫描while(i < j){ if(a[i]+a[j...原创 2019-05-27 14:14:42 · 7068 阅读 · 0 评论 -
树的专题(持续更新)
二叉树注:完全二叉树的性质:1号位存放的必须是根节点。完全二叉树当中的任何一个结点(编号为x),其孩子结点的编号一定是2x,右孩子的编号一定是2x+1。判断某个结点为叶节点的标志:该结点(下标为root)的左孩子结点(root*2)大于结点总个数n。完全二叉树与层次遍历有关系。1.存储结构struct node{ int data; // 数据域 node* lchild...原创 2019-05-30 17:44:52 · 158 阅读 · 0 评论 -
数据结构专题(持续更新)
一、堆栈基本操作:#include <stack>stack<int> s;s.size() // 栈内元素个数s.empty() // 判断栈是否为空s.push(x) // 将x入栈s.pop() // 栈顶出栈s.top() // 栈顶元素while(!s.empty()) // 栈的清空(STL中没有实现栈的清空){ s.pop();} ...原创 2019-05-28 12:22:12 · 282 阅读 · 0 评论 -
2016计算机学科夏令营上机考试C:反反复复(字符串处理)
思路分析本题是基础的字符串处理问题,利用二维数组进行存储,再遍历输出即可。但要注意的是,二维数组进行存储时要 “S”型存储,要看清题目要求再做。代码#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace st...原创 2019-04-02 16:43:06 · 309 阅读 · 0 评论 -
2015计算机学科夏令营上机考试C:二维数组右上左下遍历(规律 or BFS)
思路分析方法一: 根据观察,遍历的顺序按横纵坐标之和递增访问,和相等的情况下,按横坐标递增访问。方法二: 根据观察可得,访问的第一个永远是map[0][0],最后一个是map[row-1][col-1],并且每次都是先向右访问再向下,所以这就是两个方向:先右后下的BFS问题。代码——方法一#include <iostream>#include <cstdio>...原创 2019-04-07 11:37:48 · 563 阅读 · 0 评论 -
2017计算机学科夏令营上机考试C:岛屿周长(模拟题)
思路分析先将输入的地图存入map数组,并加上一圈0,作为边界。岛屿的周长可以等价于,输入的地图中每个“1”四个方向相邻的“0”的个数之和。tips四个相邻方向的变化可以事先存入数组中:int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0};然后只需要循环4次进行相加,便实现了往四个方向的搜索。代码#include <io...原创 2019-03-29 15:38:54 · 305 阅读 · 0 评论 -
2016计算机学科夏令营上机考试H:丛林中的路(图最小生成树——Prime、kruskal)
思路分析本题是一道经典的图最小生成树模板题,我分别利用邻接矩阵、邻接表存储图结合prime算法,以及存储边结合kruskal算法,求解了本题。之所以这么麻烦地都写出来,就是为了整理一下这个知识点,下次再看的时候方便一些吧。方法1:基于邻接矩阵的 prime 算法方法2:基于邻接表的 prime 算法玛の。。。。看到这个就生气,调了一晚上都没搞好。。最后是因为双向图,我在vector存储...原创 2019-04-03 21:56:31 · 422 阅读 · 0 评论 -
2016计算机学科夏令营上机考试G:重建二叉树(二叉树重建+遍历)
思路分析本题非常非常典型!已知前序遍历+中序遍历,可以得到后序遍历;已知后序遍历+中序遍历,可以得到前序遍历。因为前序遍历的第一个结点为根节点,中序遍历以该根节点为界,分为左右子树,不断递归每个子树即可将二叉树重建出来,之后再对其进行后序遍历即可。所以每次的任务便是在中序遍历中找到根节点,并确定每个子树的左、右边界。node* Change(int pre_L, int pre_R, ...原创 2019-04-03 22:24:45 · 167 阅读 · 0 评论 -
2017计算机学科夏令营上机考试E:怪盗基德的滑翔翼(动态规划——LIS、LDS)
思路分析本题是一道“最长递增/递减子序列”模板题,利用动态规划来解决。但因为可以向两个方向移动,所以要从左向右、从右向左分别求解最长递减子序列。注:从右向左最长递减子序列 <=> 从左向右最长递增子序列。因而本题只需要分别求出最长和最短递减子序列,二者中的较大值即为本题结果。动态规划:设置dp[i]表示以字符S[i]为结尾的最长子串长度,初始化dp[i]=1。遍历整个字符...原创 2019-03-30 09:31:03 · 190 阅读 · 0 评论 -
2017计算机学科夏令营上机考试D:Safecracker(DFS+回溯)
题意Klein语句通常包含5到12个不同的大写字母,通常在句子的开头,并提及一个或多个数字。五个大写字母形成打开保险箱的组合。通过以适当的方式组合来自所有数字的数字,您将获得一个数字目标。(构建目标号码的细节是分类的)要找到组合,您必须选择满足以下等式的五个字母v,w,x,y和z,其中每个字母由其在字母表中的顺序位置替换A = 1,B = 2,…,Z = 26)。这个组合就是vwxyz。如果...原创 2019-03-30 10:30:37 · 181 阅读 · 0 评论 -
2017计算机学科夏令营上机考试G:实现堆结构(堆+优先队列)
思路分析方法一: 利用全局数组实现heap。需要熟练掌握堆的结点删除、插入,删除利用 downAdjust(low, high) 函数,插入利用 updownAdjust(low, high) 函数。注意点:heap数组下标要从1开始,否则无法计算左右孩子结点的下标;入堆向上调整,出堆向下调整,建堆从右向左、从下往上调整(逆序for循环+向下调整);堆排序先建堆,从右向左(不包含堆...原创 2019-03-30 11:39:08 · 187 阅读 · 0 评论 -
2018计算机学科夏令营上机考试C:The Die Is Cast(双重DFS)
题目大意寻找每个连通“*”块中的连通“X”的个数。思路分析双重DFS——外层DFS搜索“*”连通块,内层DFS搜索“X”连通块。TIPS:在搜索过程中,将已搜索过的位置变为与背景相同的元素,保证了该位置不会被重复搜索。存在的问题鉴于我有强迫症,纠结了好久好久的问题是,怎么利用访问数组visit的方式来写这个两次DFS,却一直出错。希望哪位大佬能够解答一下,跪谢~代码#inclu...原创 2019-03-31 10:03:18 · 804 阅读 · 1 评论 -
搜索专题(持续更新)
问题1 《算法笔记》P276思路分析本题是连通块个数问题,利用搜索的方法来解决,DFS和BFS都可以。方法一: DFS本题是要求在“0”里边搜索“1”,因而可以在DFS的过程当中,将已搜索到的“1”变为“0”,这样就避免了对同一个“1”的重复搜索。...原创 2019-03-31 10:17:42 · 195 阅读 · 0 评论 -
2018计算机学科夏令营上机考试E:重要逆序对(归并排序)
思路分析本题是求解“重要逆序对”,其思路与“逆序对”的求解方式完全一样,利用归并排序解决,只不过在对逆序对数量更新的时候不能嵌套在归并过程当中。定义:逆序对: i < j && ai > aj重要逆序对:i < j && ai > 2*aj核心思想:逆序对的数量,实质上就是在归并过程当中(右半部分逐个插入到左半部分...原创 2019-04-01 07:52:45 · 1046 阅读 · 0 评论 -
2016计算机学科夏令营上机考试F:Dungeon Master(搜索——六方向BFS)
题目大意三维空间的迷宫问题,要求从S搜索到E,“.”为可行进路线,“*”为不可行进路线,搜索方向为前后左右上下六个方向。思路分析三维空间的迷宫问题,解题思路与方法与二维空间一致。利用三维数组存储地图,采用BFS搜索,向6个方向遍历即可。注意点:因为矩阵中存储的是字符,所以如果用scanf进行输入时要用getchar对上次输入的回车符进行吸收。但是用getchar吸收回车,如果没计算地...原创 2019-04-05 21:06:40 · 176 阅读 · 0 评论 -
2016计算机学科夏令营上机考试D:文件结构“图”(模拟?)
思路分析同一目录下的file和dir处于不同的层次;一个dir及其里边的file处于同一层次;每个‘]’与距其最近的dir相匹配。对每个层次进行编号,每个层次中的file存入对应层次的优先队列中,遇见dir即输出,遇见‘]’即将该优先队列中的file输出。前导空格数与对应所处层次相对应匹配。代码#include <iostream>#include <cstd...原创 2019-04-05 21:29:11 · 240 阅读 · 0 评论 -
2018计算机学科夏令营上机考试B:回文子串(字符串or动态规划)
思路分析本题是常见的字符串分析类题目,因而可以利用对字符串的操作来进行求解。同时,这也是一道典型的“动态规划”问题——最长回文子串。综上,可以得到两种解题方法:方法一: 字符串处理我们只需要对字符串的每一位进行遍历,判断以该位作为对称中心的回文子串的最大长度。最后选取长度最大、最先遍历到的子串即可。考虑回文字符串有两种形式:以奇数为对称点(abcba) 和以偶数为对称点(abccba)。...原创 2019-03-28 09:23:30 · 421 阅读 · 0 评论 -
2018计算机学科夏令营上机考试A:计算两个日期之间的天数
思路分析该题是典型的“时间差值类”问题,可以将每个时间对应成一个具体的数值(此处将每个日期转换为从0到现在的总天数),再将起始和终止日期对应的总天数相减,即为两个日期相差的天数。本题的重点在于如何处理闰年中多出的2.29这一天,我采用的是“打表”,即将闰年和非闰年的每个月的天数先存入数组当中,再根据闰年与否进行累加得到对应的天数。闰年判断条件:1. 是4的倍数但不是100的倍数 ...原创 2019-03-27 22:11:18 · 307 阅读 · 0 评论 -
2017计算机学科夏令营上机考试A:判决素数个数(素数的判断、素数表)
思路分析本题是一道模板题,求出素数表,计数在X、Y之间的素数个数即可。注:此处X、Y的大小关系并没有给出!方法一: 对每个数进行素数判断;方法二: 素数筛选法——从2开始遍历,素数的倍数一定是非素数。代码——方法一#include <iostream>#include <cstdio>#include <cmath>#include <a...原创 2019-03-27 22:28:32 · 205 阅读 · 0 评论 -
2015计算机学科夏令营上机考试H:Falling Leaves(搜索二叉树——重建、遍历)
题目大意迭代删除“搜索二叉树”的叶子结点,直至根结点。要求重建该“搜索二叉树”,并输出其先序遍历结果。思路分析逆向考虑。从根结点到叶子结点(从后向前)进行结点插入,重建“搜索二叉树”,再先序遍历。相关知识——二叉搜索树数据结构struct Node{ int data; Node* lchild; Node* rchild;};1. 结点构建Node* newnod...原创 2019-04-10 22:30:36 · 184 阅读 · 0 评论 -
2017计算机学科夏令营上机考试H:Subway(图的构建+Dijkstra)
题目大意给定起点和终点,以及任意条地铁线路,任意站点之间可以选择步行或乘坐地铁(如果两站在同一条地铁线上),步行速度10km/h,地铁速度40km/h,要求从起点到终点所花时间最短。思路分析本题也是图的最短路径问题,只不过此处的路径应该用所花时间来表示,用邻接矩阵存储图的信息。因而本题难度在于图的构建部分。初始化,将所有站点间距离设为无穷大INF(double类型可设为“1e30”)...原创 2019-04-07 11:26:24 · 285 阅读 · 0 评论 -
图的专题(持续更新)
一、并查集eg1. 《算法笔记》P332——好朋友思路分析:利用并查集,最终分成的组数就是集合的个数,也就是最后根节点的个数。代码#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 105;int fath...原创 2019-06-02 17:32:38 · 136 阅读 · 0 评论