![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
2020算法训练
文章平均质量分 60
学习更多经典算法,提升编码能力
纸短情长的博客
这个作者很懒,什么都没留下…
展开
-
python 回溯法 子集树模板
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。1、数字组合问题找出从自然数1、2、3、…、n中任取r个数的所有组合。例如,n=5,r=3的所有组合为:1,2,31,2,41,2,51,3,41,3,51,4,52,3,42,3,52,4,53,4,5分析换个角度,r=3的所有组合,相当于原创 2021-12-19 21:38:45 · 340 阅读 · 0 评论 -
蓝桥杯 航班时间
小hh前往美国参加了蓝桥杯国际赛。小hh的女朋友发现小hh上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。小hh对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有1212小时时差,故飞机总共需要1414小时的飞行时间。不久后小hh的女朋友去中东交换。小hh并不知道中东...原创 2020-03-16 18:27:14 · 977 阅读 · 2 评论 -
递增三元组
题目描述给定三个整数数组A = [A1, A2, … AN],B = [B1, B2, … BN],C = [C1, C2, … CN],请你统计有多少个三元组(i, j, k) 满足:1. 1 <= i, j, k <= N2. Ai < Bj < Ck输入第一行包含一个整数N。 第二行包含N个整数A1, A2, ... AN。 第三行包含N个整数...原创 2020-03-16 19:34:05 · 799 阅读 · 0 评论 -
字符串hash初步(空间换时间)
问题描述:给出N个字符串(由恰好三位大写字母组成),再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数#include<iostream>using namespace std;const int maxn = 100;char S[maxn][5],temp[5];int hashTable[maxn];int hashFunc(char S[],int ...原创 2020-03-17 22:08:45 · 217 阅读 · 0 评论 -
Leetcode 153:寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0解题思路利用好数组是排好序的条件,最小元素的右...原创 2020-03-13 20:43:47 · 205 阅读 · 0 评论 -
试题 算法训练 审美课(异或)
审美课问题描述 《审美的历程》课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋友之手。老师请同学们分辨哪些画的作者是梵高,但是老师自己并没有答案,因为这些画看上去都像是小朋友画的……老师只想知道,有多少对同学给出的答案完全相反,这样他就可以用这个数据去揭穿披着皇帝新衣的抽象艺术了(支持帅老师^_^)。 答案完全相反是指对每一幅画的判断都相反。输入格式...原创 2020-02-24 14:31:47 · 659 阅读 · 0 评论 -
矩阵乘法
矩阵乘法解析:https://www.shuxuele.com/algebra/matrix-multiplying.html题1:算法训练 矩阵乘法问题描述 输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200)。 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。 接下来s行,每...原创 2020-02-17 17:54:53 · 298 阅读 · 0 评论 -
n-魔方阵(找规律)
所谓“n-魔方阵”,指的是使用1〜n2共n2个自然数排列成一个n×n的方阵。该方阵的每行、每列及对角线元素之和都相等,并为一个只与n有关的常数,该常数为n×(n2+1)/2。 本题要求实现n-魔方阵(阶数最大为20)n的值从键盘读入,题目保证n的值为奇数。输入格式:输入在一行中给出一个奇数n的值。输出格式:按照样例的格式输出对应的n-魔方阵,每列占5个字符,右对齐。输入样例:...原创 2020-02-14 17:53:37 · 2123 阅读 · 0 评论 -
非常弹的球 (30分)(物理题)
刚上高一的森森为了学好物理,买了一个“非常弹”的球。虽然说是非常弹的球,其实也就是一般的弹力球而已。森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不太会,你能帮他解决吗?当然为了刚学习物理的森森,我们对环境做一些简化:假设森森是一个质点,以森森为原点设立坐标轴,则森森位于(0, 0)点。 小球质量为w/100千克(kg),重力加速度为9.8米/秒平方(m/s...原创 2020-02-13 15:06:27 · 686 阅读 · 0 评论 -
币值转换 (20分)
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。输入格式:输入在一行中给出一个不超过9位的非负整数。输出格式:在一行中输出转换后的...原创 2020-02-13 13:39:50 · 1819 阅读 · 0 评论 -
find()函数及其他常用函数总结
一:find()函数:第一种,algorithm头文件的find()。使用方法:find(begin,end,value),一般用容器.end()来判断查找成功与否。 参数1 是容器或者数组的起始地址(容器.begin()或者数组名),也可以是任意地址,不非法即可; 参数2是结束查找的地址(容器.end()或者数组名+长度),value是想要查找的字符或者字符串 ...原创 2020-02-12 19:46:05 · 32655 阅读 · 0 评论 -
垃圾箱分布 (30分)
大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的范围内。现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的平均距离最短的那个解。如果这样的解还是不唯一,则输出编号最小的地点。输入格式:输入第一行给出4个正...原创 2020-02-12 17:47:28 · 1356 阅读 · 1 评论 -
秀恩爱分得快 (25分)
古人云:秀恩爱,分得快。互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度。如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K。任意两个人如果同时出现在若干张照片里,他们之间的亲密度就是所有这些同框照片对应的亲密度之和。下面给定一批照片,请你分析一对给定的情侣,看看他们分别有没有亲密度更高的异性朋友?输入格式:输入在第一行给出 2 ...原创 2020-02-11 00:22:51 · 2903 阅读 · 1 评论 -
哈夫曼编码(30分)
给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 'a'、'x'、'u'、'z' 的出现频率对应为 4、2、1、1。我们可以设计编码 {'a'=0, 'x'=10, 'u'=110, 'z'=111},也可以用另一套 {'a'=1, 'x'=01, '...原创 2020-02-10 17:02:05 · 3506 阅读 · 0 评论 -
二叉树的构建与前中后层序遍历(二叉树)
列出叶结点对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。输入格式:首先第一行给出一个正整数N(≤10),为树中结点总数。树中的结点从 0 到N−1编号。随后N行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。输出格式:在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行...原创 2020-02-06 16:17:10 · 1334 阅读 · 0 评论 -
指针交换两个数字
#include<cstdio>/*通过修改指针中的值可以正确交换两个数对因为是对a,b地址内的数据作修改,实参的值也发生了改变 */void swap1(int* a,int* b){ int temp = *a; *a = *b; *b = temp; }/*通过在函数内交换两个数的地址不能正确交换两个数 因为仅仅只是对形参做了修改,实参并没有改变 */...原创 2020-02-06 13:24:56 · 354 阅读 · 0 评论 -
堆中的路径(构建小顶堆)
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点...原创 2020-02-05 18:03:24 · 1711 阅读 · 0 评论 -
BFS与DFS的经典问题总结
一:BFS 广度优先遍历问题1:求矩阵块数 给出一个 m x n 的矩阵,矩阵中的元素为0或1。 称位置(x,y)与其上下左右四个位置(x,y+1)、(x,y-1)、(x+1,y)、(x-1,y)是相邻的。 如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。输入样例:0 1 1 1 0 0...原创 2020-02-02 22:08:47 · 1300 阅读 · 1 评论 -
估值一亿的AI核心代码 (20分)
估值一亿的AI核心代码(20分)以上图片来自新浪微博。本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉; 把原文中所有大写英文字母变成小写,除了I; 把原文中所有独立的can you、coul...原创 2020-01-29 22:29:44 · 3911 阅读 · 0 评论 -
0x3F3F3F3F——算法比赛中的无穷大常量
在算法竞赛中,我们常常需要用到设置一个常量用来代表“无穷大”。比如对于int类型的数,有的人会采用INT_MAX,即0x7fffffff作为无穷大。但是以INT_MAX为无穷大常常面临一个问题,即加一个其他的数会溢出。而这种情况在动态规划,或者其他一些递推的算法中常常出现,很有可能导致算法出问题。所以在算法竞赛中,我们常采用0x3f3f3f3f来作为无穷大。0x3f3f3f3f主要有如...原创 2020-01-28 23:44:40 · 1053 阅读 · 0 评论 -
白骑士的移动(BFS)
白骑士的移动小S第一次接触国际象棋。他发现国际象棋中的Knight棋子的移动方式和中国象棋中的马类似,移动方式如图所示。于是小S在棋盘上随意摆上了一些棋子,其中包括一枚白骑士、一枚黑皇后、若干黑战车和若干黑主教。小S想知道,如何能在避开黑战车和黑主教的攻击范围的前提下,花费更少的步数吃掉黑皇后。注1:战车的攻击范围呈直线,和中国象棋的車类似;主教的攻击范围呈斜线,无障碍物情况下可...原创 2020-01-27 23:42:06 · 419 阅读 · 0 评论 -
海盗分赃(25分)(找规律)
P 个海盗偷了 D 颗钻石后来到公海分赃,一致同意如下分赃策略:首先,P 个海盗通过抽签决定 1 - P 的序号。然后由第 1 号海盗提出一个分配方案(方案应给出每个海盗分得的具体数量),如果能够得到包括 1 号在内的绝对多数(即大于半数)同意,则按照该分配方案执行,否则 1 号将被投入大海喂鲨鱼;而后依次类似地由第 2 号、第 3 号等等海盗提出方案,直到能够获得绝对多数同意的方案出现为止,...原创 2020-01-26 16:24:07 · 741 阅读 · 1 评论 -
L2-031 深入虎穴 (25 分)
著名的王牌间谍 007 需要执行一次任务,获取敌方的机密情报。已知情报藏在一个地下迷宫里,迷宫只有一个入口,里面有很多条通路,每条路通向一扇门。每一扇门背后或者是一个房间,或者又有很多条路,同样是每条路通向一扇门…… 他的手里有一张表格,是其他间谍帮他收集到的情报,他们记下了每扇门的编号,以及这扇门背后的每一条通路所到达的门的编号。007 发现不存在两条路通向同一扇门。内线告诉他,情报就藏在迷...原创 2019-04-05 19:55:51 · 1094 阅读 · 0 评论 -
任务调度的合理性(拓扑排序)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系...原创 2020-01-24 22:25:48 · 1049 阅读 · 0 评论 -
PAT Judge (25分)
The ranklist of PAT is generated from the status list, which shows the scores of the submissions. This time you are supposed to generate the ranklist for PAT.Input Specification:Each input file co...原创 2020-01-24 00:41:48 · 206 阅读 · 0 评论 -
迪杰斯特拉算法(dijkstra)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编...原创 2020-01-22 11:22:31 · 1051 阅读 · 1 评论 -
哈利·波特的考试(弗洛伊德算法)
哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所...原创 2018-12-14 00:21:49 · 270 阅读 · 0 评论 -
特殊队列
普通的队列仅有 EnQueue 和 DeQueue 两种操作,分别表示在队尾增加元素和取出队首元素。现在给队列增加一种新的操作 DeleteMid,表示删除队列的中间元素。对于有N个元素的队列,若N为偶数,中间元素定义为从队首到队尾的第N/2个元素;若N为奇数,中间元素定义为第(N+1)/2个元素。现给出队列的一系列操作,输出相应结果。输入格式:第一行输入一个不超过1...原创 2020-01-19 14:24:53 · 1986 阅读 · 0 评论 -
镖局运镖(kruskal算法)
镖局的运镖,就是运货(类似现在的物流)。镖局每到一个新地方开展业务,都需要对运镖途中的绿林好汉进行打点。好说话的打点费就比较低,不好说话的打点费就比较高。龙门镖局现在有一趟镖请你来规划路线,已知城市的地图,你需要选择一些道路进行疏通,以便镖局可以到达任意一个城市,要求花费的银子越少越好。输入格式:第一行有两个数n和m,n表示有n个城市(编号从1到n),m表示有m条道路。接下来m行,每行形如...原创 2020-01-17 16:37:31 · 1836 阅读 · 0 评论 -
汉密尔顿回路
著名的“汉密尔顿(Hamilton)回路问题”是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次)。本题就要求你判断任一给定的回路是否汉密尔顿回路。输入格式:首先第一行给出两个正整数:无向图中顶点数N(2<N≤200)和边数M。随后M行,每行给出一条边的两个端点,格式为“顶点1 顶点2”,其中顶点从 1 到N编号。再下一行给出一个正整数K,是待检验的回路的条...原创 2020-01-15 21:44:58 · 886 阅读 · 0 评论 -
动态规划dp经典
一:数塔问题如图所示,将一些数字排成数塔的形状,其中第一层有一个数字,第二层有两个数字...第n层有n个数字。现在要全球从第一层走到第n层,每次只能走向下一层连接的两个数字,问:最后将路径上所有数字相加后得到的和最大是多少?样例输入5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5样例输出30代码如下:#include<iostream>...原创 2019-12-09 00:21:05 · 394 阅读 · 0 评论 -
堆栈操作合法性
假设以S和X分别表示入栈和出栈操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入S和X序列,判断该序列是否合法。输入格式:输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(≤50)是堆栈的最大容量。随后N行,每行中给出一个仅由S和X构成的序列。序列保证不为空,且长...原创 2019-12-06 20:07:03 · 1804 阅读 · 0 评论 -
中缀表达式转换为后缀表达式(思路解析)
所谓中缀表达式,指的是运算符处于操作数的中间(例:3 * ( 4 + 2 )),中缀表达式是人们常用的算术表示方法,但中缀表达式不容易被计算机解析,因为既要考虑运算符的优先级,还要考虑括号的处理。但中缀表达式仍被许多程序语言使用,因为它符合人们的普遍用法。后缀表达式,指的是不包含括号,运算符放在两个操作数的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,也不需要考虑...原创 2019-12-03 20:14:25 · 4168 阅读 · 1 评论 -
C++中的getline()函数
在使用c++编译器刷题时无法使用c语言中的gets()函数来读取一行而用循环来读取一个个字符又觉得较为麻烦,于是就诞生了getline()函数1:getline(istream&is,string&str,chardelim)参数一:istream&is表示一个输入流,譬如cin;参数二:string &str表示把从输入流读...原创 2019-12-03 18:06:43 · 3782 阅读 · 0 评论 -
后缀表达式的计算
后缀表达式的计算过程 1:遇到操作数时,入栈 2:遇到运算符时,取栈顶操作数1后把该数弹出 取出栈顶操作数2后把该数弹出 根据对应的操作数计算结果后将结果入栈 最后栈中的值就是要求的结果代码如下:#include<cstdio> #include<io...原创 2019-12-01 11:09:35 · 412 阅读 · 0 评论 -
整型关键字的散列映射
整型关键字的散列映射给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不...原创 2019-11-30 18:51:19 · 292 阅读 · 0 评论 -
红色警报(25分)
战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0<N≤500)和M(≤5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的...原创 2019-11-25 21:48:51 · 465 阅读 · 0 评论 -
悄悄关注 (map的使用)(25 分)
新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。输入格式:输入首先在第一行给出某用户的关注列表,格式如下:人数N 用户1 用户2 …… 用户N其中N是不超过5000的正整数,每个用户i(i=1, ...,...原创 2019-03-05 23:27:31 · 253 阅读 · 0 评论 -
愿天下有情人都是失散多年的兄妹(25分)
呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则不可通婚。本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚?输入格式:输入第一行给出一个正整数N(2≤N≤104),随后N行,每行按以下格式给出一个人的信息:本人ID 性别 父亲ID 母亲ID其中ID是5位数字,每人不同;性别M代表男性、F代表女...原创 2019-11-24 16:02:24 · 446 阅读 · 0 评论 -
青蛙跳台阶(斐波那契数列规律)
一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。输入格式:首先输入数字n,代表接下来有n组输入,50>=n>=0,然后每行一个数字,代表台阶数,数字为小于60的整数输出格式:对每一组输入,输出青蛙的跳法。输入样例:3123输出样例:123用递归的话会运行超时#include&l...原创 2019-11-18 19:53:01 · 1133 阅读 · 0 评论