
算法题
文章平均质量分 51
记录所刷过的算法题,2022天梯+蓝桥
CodeSlogan
985研究生在读,沉淀中,敬请期待……
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
割圆法求Pi(Java)
采用割圆术计算圆周率,即对一个圆先割出一个正方形,再割出4个等腰三角形,再割出8个等腰三角形,后面依此类推,把这些割出的图形面积相加即为圆的面积,然后除以圆的半径的平方,最终得到圆周率。分析首先这道题所描述的割圆法,与我们以往认知的割圆法有所不同,本题是以面积趋近圆,最后用数学公式S=pi*r^2求出pi按照题目所述先割正方形,再割三角形的方法,用代码实现极为复杂。通过分析题目我们得知,可以将每次分割的三角形与起初的正方形结合,看作一个正多边形求解。通过连接圆心,将正多边形分解为三角形,利用数学原创 2021-09-18 20:06:31 · 1044 阅读 · 0 评论 -
leetcode-217.存在重复元素
给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: trueSTL之set容器的运用代码如下:class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_set<int>s; for(in原创 2021-07-18 20:35:13 · 79 阅读 · 0 评论 -
【buaa机试题】机场登机口调整
假设某机场所有登机口(Gate)呈树形排列(树的度为3),安检处为树的根,如下图所示。图中的分叉结点(编号大于等于100)表示分叉路口,登机口用小于100的编号表示(其一定是一个叶结点)。通过对机场所有出发航班的日志分析,得知每个登机口每天的平均发送旅客流量。作为提升机场服务水平的一个措施,在不改变所有航班相对关系的情况下(即:出发时间不变,原在同一登机口的航班不变),仅改变登机口(例如:将3号登机口改到5号登机口的位置),使得整体旅客到登机口的时间有所减少(即:从安检口到登机口所经过的分叉路口最少)。原创 2022-07-11 18:41:52 · 891 阅读 · 0 评论 -
【重返天梯】L2-025 分而治之 (25 分)
题目分析分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可行性。原题链接简言之,就是给定顶点及部分边,构成图。随后再给出几组的顶点,问删掉这些顶点,图中是否就没有边存在边存在首先想到用度d[]表示,只要有一个顶点的度大于0,此方案就不通过N 和 M(均不超过10 000)的数据范围巨大,无法直接用数组来存储图,会有两个测试点无法通过。因此选择用vec原创 2022-04-22 17:39:49 · 550 阅读 · 0 评论 -
重返天梯-L2-020 功夫传人 (25 分)(bfs or dfs)
这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。原创 2022-04-22 15:20:09 · 465 阅读 · 0 评论 -
重返天梯-并查集问题
L2-007 家庭房产 (25 分) (往结点编号小的合并)题目分析给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。能想到是并查集并不困难,但处理数据的输入输出还是有一定的难度C++#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1e4 + 10;struct Data原创 2022-04-20 19:25:55 · 901 阅读 · 1 评论 -
重返天梯-L1-002 打印沙漏 (20 分)(original intention)
题目描述本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印***** *** * ********20分,梦开始的地方,特此留念现在写不觉得什么,但确确实实充满着回忆C++#include <bits/stdc++.h>using namespace std;int main() { int n; char ch; cin >> n >> ch; int s =原创 2022-04-19 23:24:50 · 98 阅读 · 0 评论 -
重返天梯-L2-016 愿天下有情人 (25 分)(bfs)
题目描述原题链接给出一对情侣的编号,搜索他们是否有共同的祖先,如有则不可通婚原创 2022-04-19 17:33:37 · 352 阅读 · 0 评论 -
重返天梯-关于树的深搜
题目描述简言之,按照字典序遍历树的结点,同时记录下最长链及其结点由于是字典序,想到用vector根据双亲表示法对数据进行存储利用深搜确定最长链原创 2022-04-18 21:38:51 · 594 阅读 · 0 评论 -
完全二叉树的权值(双指针)
题目描述给定一棵包含 NNN 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1,A2,⋅⋅⋅ANA1,A2,⋅⋅⋅ANA1,A2,⋅⋅⋅AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1。C++#include <iostream>#include <cstring>#include <algorithm&原创 2022-04-18 18:26:00 · 1049 阅读 · 0 评论 -
重返天梯-L2-036 网红点打卡攻略 (25 分)
重返天梯-L2-036 网红点打卡攻略 (25 分)C++有点小坑,所以记录一下#include <bits/stdc++.h>using namespace std;const int N = 210;int g[N][N];int n, m, k;int anscnt, ansid, anssum = 1e9;vector<int> path;int st[N];int main() { memset(g, 0x3f, sizeof g);原创 2022-04-18 17:28:31 · 1305 阅读 · 1 评论 -
二叉树前/后+中->层序(新)
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。属于非常基础的后+中->层。题目有说互不相等,所以可以先用哈希储存每个中序结点的位置build()函数是一个固定的板子,不过由于是层次,需要多一个index参数原创 2022-04-16 10:13:57 · 1047 阅读 · 0 评论 -
重返天梯-L3-014 周游世界 (30 分)(dfs)
周游世界是件浪漫事,但规划旅行路线就不一定了…… 全世界有成千上万条航线、铁路线、大巴线,令人眼花缭乱。所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企业支持的旅行路线。本题就要求你帮旅行社实现一个自动规划路线的程序,使得对任何给定的起点和终点,可以找出最顺畅的路线。所谓“最顺畅”,首先是指中途经停站最少;如果经停站一样多,则取需要**换乘线路次数最少的路线。原创 2022-04-15 14:35:47 · 686 阅读 · 0 评论 -
重返天梯-L3-011 直捣黄龙 (30 分)(dijkstra)
题目解析重返天梯-L3-011 直捣黄龙 (30 分)(dijkstra)原题链接本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。写这道题之前,可以也写一写L2-001 紧急救援 (25 分),都是比较基础的最短路径问题。不过这两道题除了要算出最短路径外,还要额外地输出一些参数。现在逐一对原创 2022-04-14 19:31:18 · 382 阅读 · 0 评论 -
重返天梯-L3-005 垃圾箱分布 (30 分)(dijkstra)
以垃圾箱的位置必须选在到所有居民点的**最短距离最长**的地方,同时还要保证每个居民点都在距离它一个**不太远**的范围内。现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的**平均距离最短**的那个解。如果这样的解还是不唯一,则输出**编号最小**的地点。这里是这道题对于输出的要求,我在这里没有处理到位原创 2022-04-12 23:37:04 · 1305 阅读 · 0 评论 -
重返天梯-L3-008 喊山 (30 分)(bfs)
输入第一行给出3个正整数n、m和k,其中n(≤10000)是总的山头数(于是假设每个山头从1到n编号)。接下来的m行,每行给出2个不超过n的正整数,数字间用空格分开,分别代表可以听到彼此的两个山头的编号。这里保证每一对山头只被输入一次,不会有重复的关系输入。最后一行给出k(≤10)个不超过n的正整数,数字间用空格分开,代表需要查询的山头的编号。原创 2022-04-12 16:06:52 · 361 阅读 · 0 评论 -
重返天梯-L3-004 肿瘤诊断 (30 分)(三维bfs)
需要理解下,搜索每个像素点的上下左右里外,6个方位,连通超过t的,则符合题意,加入到总体积中原创 2022-04-12 15:28:35 · 276 阅读 · 0 评论 -
百亿富翁(单调栈)
首先想到暴力解法,直接写两个for循环。但这道题数据量为$10^5$,所以要想一个时间复杂度$O(nlogn)$的解法。拿左边第一个比它高的楼盘来说,我们可以维护一个**单调栈**来处理这一过程。当扫到一个数时,如果此时栈顶的元素比当前元素还小的话,那必然不可能是后续数据的答案,因为这里要找的是左边第一个比它高的楼盘,就可以令栈顶元素出栈。原创 2022-04-06 10:52:56 · 503 阅读 · 0 评论 -
食物链(扩展域并查集)
有三种动物,他们形成一个食物链。现在给出一些语句,根据关系判断他们的真假原创 2022-04-05 22:37:04 · 984 阅读 · 0 评论 -
关押罪犯(二分图+二分 or 扩展域并查集)
简言之,就是一个监狱里有若干罪犯,他们两两之间存在的一个仇恨值。监狱里有两个房间,需要把这么一些罪犯分到两边,来使房间内两两之间最大的仇恨值最小。首先为什么想到二分图?因为目标是要找到一个最小的仇恨值,那么大于这个仇恨值关系的罪犯,一定可以被分到两边,即他们之间的关系是组与组之间的关系,可以形成一个二分图。一旦小于这个仇恨值,就会有组内之间的边出现,无法构成二分图。原创 2022-04-05 17:31:19 · 743 阅读 · 0 评论 -
绝世武功(二阶差分)
题目描述绝世武功(二阶差分)小明在练习绝世武功, nn 个练功桩排成一排,一开始每个桩的损伤为 000。接下来小明会练习 mm 种绝世武功,每种武功都会对 [l,r][l, r][l,r] 区间分别造成 [s,e][s,e][s,e] 的伤害。这个伤害是一个等差序列。例如 l=1,r=4,s=2,e=8l = 1, r = 4, s = 2, e = 8l=1,r=4,s=2,e=8 ,则会对 1−41-41−4 号练功桩造成2,4,6,82, 4, 6, 82,4,6,8点损伤。小明想让你统计一原创 2022-04-05 14:55:20 · 925 阅读 · 0 评论 -
重返天梯-L3-001 凑零钱 (30 分) (dfs搜索)
题目描述简言之,给定一堆一定数值的硬币,问是否能凑出给定的面额?典型的组合优化问题,然而我实在看不懂背包的解法,无奈暴搜+剪枝C++(dfs + 后缀和 + 剪枝)原创 2022-04-04 20:22:13 · 520 阅读 · 0 评论 -
重返天梯-L3-028 森森旅游 (30 分) (堆优化dijkstra+multiset)
刚拿到题目的时候,在分析到底应该在哪个点全部兑换成旅游金。我们将题目中描述的旅程分为两段,在p点之前,全部使用现金;在p点之后,全部使用旅游金。然后把每个点作为p点遍历一次就好了。原创 2022-04-04 15:32:23 · 1786 阅读 · 0 评论 -
2021蓝桥 路径
题目描述小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图 中的最短路径。小蓝的图由 2021 个结点组成,依次编号 1 至 2021。对于两个不同的结点 a, b,如果 a 和 b 的差的绝对值大于 21,则两个结点 之间没有边相连;如果 a 和 b 的差的绝对值小于等于 21,则两个点之间有一条 长度为 a 和 b 的最小公倍数的无向边相连。例如:结点 1 和结点 23 之间没有边相连;结点 3 和结点 24 之间有一条无 向边,长度为 24;结点 15 和结点 25 之间有一条无原创 2022-04-02 17:49:07 · 242 阅读 · 0 评论 -
2021蓝桥直线
题目描述在平面直角坐标系中,两点可以确定一条直线。给定平面上 20×2120 × 2120×21个整点 (x,y)∣0≤x<20,0≤y<21,x∈Z,y∈Z{(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z}(x,y)∣0≤x<20,0≤y<21,x∈Z,y∈Z,即横坐标是 0到190 到 190到19 (包含 000 和 191919) 之间的整数、纵坐标是 000 到 202020 (包含 000 和 202020) 之原创 2022-04-02 17:15:00 · 625 阅读 · 0 评论 -
树状数组+二分->动态寻找第k小的数
树状数组可以把它理解为**动态**的前缀和,我们可以改变数组中的任一一个数,以更短的时间获得任一子区间的和。本节选了两道例题,来熟悉**树状数组+二分**在动态寻找第K小的数方面的应用原创 2022-04-01 16:54:33 · 389 阅读 · 0 评论 -
P1272 重建道路(树形背包)
题目的意思是给定一棵具有根节点的树,节点个数一共有N个节点。现在问最少断多少条边,可以使得某个子树的节点个数恰好为P其实这道题的难点在于,为什么是用分组背包来解,以及怎么实现这个分组背包?如果将两个知识点拆开来看,分组背包,树形DP都好理解。但如果将两个知识点合并,就很容易考察出是否真正地理解,树形背包就是一个很好的例子。原创 2022-03-31 11:54:12 · 376 阅读 · 0 评论 -
2022蓝桥模拟-子汉诺塔
小蓝很喜欢玩汉诺塔游戏。游戏中有三根柱子,开始时第一根柱子上有 n 个圆盘,从上到下圆盘的大小依次为 1 到 n。每次,可以将一个盘子从一根柱子上移动到另一根柱子上,这个盘子必须是柱子最上方的盘子,而且移到的柱子上的盘子必须比这个盘子大。小蓝的目标是将所有的盘子移动到第三根柱子上。汉诺塔是个经典问题,当盘子数量为 n 时,最少需要移动 $2^n-1$ 步,其中 $2^n$ 表示 2 的 n 次方。小蓝已经玩了一会儿(不一定按最优方案玩),他想知道,对于他目前的局面,最少还需要多少步可以到达目标。原创 2022-03-30 17:29:49 · 511 阅读 · 0 评论 -
区间DP三步曲
这里选取了区间DP非常有代表性的三道题,三题之间层层递进,有助于理解好区间DP原创 2022-03-29 14:46:18 · 795 阅读 · 0 评论 -
洛谷P1308 统计单词数
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,**单词首字母在文章中的位置**,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。原创 2022-03-26 13:27:41 · 140 阅读 · 0 评论 -
回文日期处理方法
2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。原创 2022-03-23 09:53:13 · 153 阅读 · 0 评论 -
错误票据-stringstream的使用
这题比较恶心的地方是以行读入,但是没有说这一行到底有多少个我们采用的解决方案是`getline()`行读入`stringstream`,再利用`stringstream`对象读入到数组中原创 2022-03-22 23:07:53 · 538 阅读 · 0 评论 -
K倍区间(前缀和+同余)
给定一个长度为N的数列,A1,A2,...AN,如果其中一段连续的子序列Ai,Ai+1,...Aj(i<=j)Ai, Ai+1, ... Aj(i <= j)Ai,Ai+1,...Aj(i<=j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。原创 2022-03-22 14:34:04 · 1250 阅读 · 0 评论 -
两种全排列枚举方式
题目描述以下提供两种解法,本质均为枚举全排列解法一#include <iostream>#include <algorithm>using namespace std;int ans;bool st[10];int p[10];void dfs(int u) { if (u > 8) { int x = p[0] + p[1] + p[2] + p[3]; int y = p[3] + p[4] + p[5] + p[6]; int z =原创 2022-03-22 00:23:02 · 1104 阅读 · 0 评论 -
完全二叉树前中后序->层序
如题,当题目给出二叉树的前中后序遍历时,可直接转为层序遍历原创 2022-03-21 16:21:52 · 787 阅读 · 0 评论 -
二叉搜索树层序->中序
对一棵结点带有正整数权值的二叉树,如果我们按层(从上到下、从左到右的顺序)去遍历这棵二叉树,其中存在的结点取结点的权值,不存在的结点记录为-1,直到遍历完最下层,那么我们就会得到一个整数序列。例如对下面这棵二叉树进行上述遍历操作,可以得到序列原创 2022-03-21 15:48:07 · 1283 阅读 · 0 评论 -
P1364 医院设置-floyd
把数据范围特意放在这里,意在告诉自己重视根据推算法的这一过程。在数据量小于等于100时,可以用到的算法包括`floyd`,`dp`,`高斯消元`在得到这道题考察的是多源最短路,而不是dfs遍历树,就成功把问题中的模型剥离了出来,这道题也就失去了它的神秘感原创 2022-03-21 13:13:44 · 1514 阅读 · 0 评论 -
lower_bound+set 木材仓库+烦恼的高考志愿
如果不记得STL,就无法做了吗???STL只是工具,也是人实现的,就拿lower_bound来说,本质就是二分自己在考场上仍然需要静下心来,戒骄戒躁原创 2022-03-21 11:16:44 · 495 阅读 · 0 评论 -
洛谷P1088 火星人-next_permutation的使用
人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。原创 2022-03-20 21:06:49 · 809 阅读 · 0 评论 -
分巧克力-二分
当然小朋友们都希望得到的巧克力尽可能大,你能帮小明计算出最大的边长是多少么?原创 2022-03-18 16:55:34 · 209 阅读 · 0 评论