
传统算法
文章平均质量分 54
算法练习,练习平台涉及力扣、洛谷、蓝桥杯、CCF。笔者也参加过几次算法竞赛,校级acm选拔赛一等,PAT甲级,蓝桥杯全国三等,希望与诸君共同进步,算法学习的路上不会一帆风顺,加油。
chaoql
长安大学软件工程专业硕士研究生在读,曾获蓝桥杯全国三等奖、互联网+全国三等奖等奖项,授权发明专利一篇,目前专注领域为:大模型应用、代码生成、大数据。欢迎交流!
展开
-
【计算机算法设计与分析】罗密欧与朱丽叶的迷宫问题(C++_回溯法)
每一个方恪表示迷宫中的一个房间。罗密欧位于迷宫的(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)格的路,在朱丽叶方格之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶方格的转弯次数为最少。将计算出的罗密欧通向朱丽叶的最少转弯次数和有多少条不同的最少转弯道路。第一行有3个正整数n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的k行中,每行2个正整数,表示被封闭的房间所在的行号和列号。最后的2行,每行也有2个正整数,分别表示罗密欧所处的方格(p,q)和朱丽叶所处的方格(r,s)。原创 2024-01-06 16:30:00 · 1262 阅读 · 0 评论 -
【计算机算法设计与分析】棋盘覆盖问题(C++_分治法)
若不在,则填充一个特殊方格,将其改变成一个更小的特殊棋盘(子问题),依次递归解决。按照这样来算,对于当前的整个棋盘的四部分来说,有特殊方格那部分不用覆盖,而其余三部分都新增了一个特殊方格,恰好凑成一个L型骨牌,递归直到当前棋盘只有一个方格为止。棋盘覆盖:用4种不同形态(方向不同)的L型骨牌覆盖一个给定的特殊棋盘(即特殊方格的位置已经确定了)上除特殊方格外的所有方格,且任何两个L型骨牌不得重复覆盖。个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为一个特殊方格,且称该棋盘为一个特殊棋盘。原创 2024-01-04 17:17:23 · 2142 阅读 · 0 评论 -
【计算机算法设计与分析】n皇后问题(C++_回溯法)
使用回溯法对解空间进行深度优先搜索遍历,同时要满足规则(任何两个皇后不放在同一行或同一列或同一斜线上),为节省时间我创建了四个数组:x[1000], y[1000], zr[1000], zl[1000],分别存储横轴、纵轴、左对角线、右对角线上是否已被占用的信息。zr[i - j + n]=1表示这条从左上到右下的对角线已被占用(所有处于同一条左上到右下对角线上元素的横坐标减纵坐标都相同,为了让索引为正,所以加n);按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。原创 2024-01-04 13:56:37 · 1043 阅读 · 0 评论 -
【计算机算法设计与分析】漂亮打印问题(C++_动态规划)
在每次更新c[j]时记录position[j] = i,即对于以单词j为结尾的一行来说,本行最佳起始位置为单词i。position数组中很多值都是无意义的,因为动态规划是从前往后算的,但是只有最后的数值才是全局的最优,输出时由果导因,即从后往前看。这里所说的“漂亮”的定义如下:在打印机所打印的每一行中,行首和行尾可不留空格;行中每两个单词之间留一个空格;如果在一行中打印从单词i到单词j的字符,则按打印规则,应在一行中恰好打印。因此,以各行(最后一行除外)的多余空格数的立方和达到最小作为“漂亮”的标准。原创 2024-01-04 17:00:00 · 1139 阅读 · 0 评论 -
【计算机算法设计与分析】九宫格问题/三阶幻方问题(C++_回溯法)
使用回溯算法计算九宫格问题的所有可行解,九宫格问题是指在 3×3 的网格中填入 1-9 个不重复的数字,同时满足以下条件:九宫格问题是指在 3×3 的网格中填入 1-9 个不重复的数字,并满足每行、每列或每条对角线上的所有元素之和都是 15。请注意,每个数字只能出现一次。回溯法,直白点说其实就是一个尝试一切可能的递归算法,也就是一种深度优先搜索算法,它的编写也满足递归的两个要点:结束条件和循环体。原创 2024-01-03 14:31:58 · 1523 阅读 · 0 评论 -
【计算机算法设计与分析】单源最短路径问题(C++_dijkstra算法-贪心算法)
迪杰斯特拉算法过程维护两个集合S和U,S集合包含已求出的最短路径的点(以及相应的最短长度),U集合包含未求出最短路径的点。由下图可以看出迪杰斯特拉算法实际上就是不断贪心地选择与起点距离最近的点,并将其从U集合中取出加入到S集合中,这个过程不断迭代,直到所有的点都被加入S。给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出s号点到每个点的最短距离。原创 2024-01-02 16:58:13 · 1317 阅读 · 0 评论 -
【计算机算法设计与分析】图像压缩问题(C++_动态规划)
状态转移方程更新的过程简单来说就是:在每次加入新像素点的时候从后往前去试,把新像素和前几个像素放在一起可以使总体的存储位数最少。,表示像素点i的灰度值。状态转移方程的含义是后k个像素点为一组,这k个像素点都按照最多存储长度来算,也就是。除去这k个像素点以外,前面的划分由于其满足最优子结构,还按照原本的来,即。由于多分了一组,新的组需要附加像素点数目l[i]的8位和最大像素存储长度。中,有I[i]个像素,且该段中每个像素都只用b[i]位表示。的最优分段,使得依此分段所需的存储空间最小。按此格式存储像素序列。原创 2023-12-22 16:30:00 · 1910 阅读 · 0 评论 -
【计算机算法设计与分析】最近点对问题(C++_分治)
针对点对在左侧和右侧的情况,我们只需要不断分治,直到一侧只有两个点的时,最近点对距离就是这两个点之间的距离dis;对于左右各一个点的情况,我们先按照之前的策略找到中线两侧分别的最近距离,然后再在中线两侧以两侧最短距离dis为界划出一个宽为2*dis的区域,再在这个区域内按照暴力解法找最近点对即可(按照鸽巢原理,只需要暴力遍历六个点即可)。我们给定了一个平面上由 n 个点组成的数组,问题是找出数组中最接近的一对点。最近点对问题的暴力解法为 O(n^2),计算每对点间的距离,并返回最小的距离。原创 2023-12-20 16:54:27 · 1351 阅读 · 2 评论 -
【剑指 Offer】斐波那契数列(C++_Easy_记忆化递归/动态规划)
1. 题目写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。2. 示例2.1 示例1输入:n = 2输出:12.2 示例2输入原创 2021-04-16 17:21:50 · 398 阅读 · 0 评论 -
【剑指 Offer】用两个栈实现队列(C++_Easy_栈/队列)
1. 题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )2. 示例2.1 示例 1输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]2.2 示例 2输入:[“CQueue”,“deleteHead原创 2021-04-16 14:25:32 · 175 阅读 · 0 评论 -
【剑指 Offer】从尾到头打印链表(C++_Easy_链表/栈)
Question输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。Instance输入:head = [1,3,2]输出:[2,3,1]Confine0 <= 链表长度 <= 10000SolutionSolution 1:Vector/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN原创 2021-04-14 15:35:53 · 135 阅读 · 0 评论 -
【剑指 Offer】二维数组中的查找(C++_Medium_搜索)
题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定原创 2021-04-13 16:37:54 · 152 阅读 · 0 评论 -
【剑指 Offer】替换空格(C++_Easy_遍历/原地)
题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例输入:s = “We are happy.”输出:“We%20are%20happy.”限制0<=s.size()<=100000 <= s.size() <= 100000<=s.size()<=10000题解题解一:遍历 string replaceSpace(string s) { string str=""; int n=s.size();原创 2021-04-12 22:42:35 · 119 阅读 · 0 评论 -
【剑指 Offer】数组中重复的数字(C++_Easy_遍历/哈希/快排/原地)
题目在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。测试样例输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制2 <= n <= 100000题解题解一:遍历对vector容器中的数值进行逐个遍历,并把检查过的数值在数组中标记出来,如果数值已经被标记过则返回该值。 int findRepeatNumber(vect原创 2021-04-12 00:36:38 · 181 阅读 · 0 评论 -
【计算机算法设计与分析】最优子结构和贪心选择性质的证明
最优子结构性质(反证法)计算某问题的最优解包含的计算该问题的子问题也是最优解。事实上,如果找到子问题的更优解,则可以替换当前子问题的解,得到一个比最优解更优的解,这是一个矛盾。贪心选择性质(数学归纳法)先设一个最优解A⊆EA\subseteq EA⊆E(EEE为所给定的总元素集合,且AAA和EEE均按照某种有利于算法贪心进行的顺序进行排序),并且设kkk为最优解的第一个元素(即k=min1≤i≤n{i∣xi=1}k=min_{1\leq{i}\leq{n}}\{i|x_i=1\}k=min1≤i原创 2020-11-24 21:17:12 · 9998 阅读 · 0 评论 -
【计算机算法设计与分析】矩阵连乘问题(C++_DP)
问题描述给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10100,1005和550,采用(A1A2)A3,乘法次数为101005+10550=7500次,而采用A1(A2A3),乘法次数为100550+10100*50=75000次乘法,显然,最好的次序是(A1A2)A3,乘法次数为7500次。求解过程Code#includ原创 2020-11-22 18:46:29 · 1005 阅读 · 1 评论 -
【计算机算法设计与分析】线性时间选择(C++_分治递归)
问题描述给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。思路线性时间选择有两种方法:(1)随机选择快排的标准元素。(2)将集合分为n个由五个元素组成的集合,对每个五元素集合求其中位数,再对所有的五元素集合的中位数求其中位数,作为快排的标准元素。CodeV-1(RandomizedSelect)#include<bits/stdc++.h>#define M 100using namespace std;int a[M]={6, 7, 5,原创 2020-11-20 16:48:10 · 1315 阅读 · 0 评论 -
【计算机算法设计与分析】快速排序(C++_分治递归)
问题描述快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(问题描述摘自百度百科)闲话在实际的算法编程中,快排使用的是algorithm库中的sort()函数(可以了解下,很简单也很好用),但是自己从来没有实现过这个排序算法…Code#include<bits/stdc原创 2020-11-20 09:10:30 · 759 阅读 · 0 评论 -
【计算机算法设计与分析】归并排序(C++_分治递归)
问题描述归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。笔者内心OS今晚准备算法期末考试地时候,突然发现自己没有写过归并排序…好像从大一开始一直都知道这个概念以及排序过程,但是从来没有自己实践过,这个以后得注意!Code#include<bits/std原创 2020-11-20 00:59:36 · 969 阅读 · 0 评论 -
【计算机算法设计与分析】最大团问题(C++_DFS+记忆化搜索+剪枝)
问题描述(摘自百度百科)给定无向图G=(V,E),其中V是非空集合,称为顶点集;E是V中元素构成的无序二元组的集合,称为边集,无向图中的边均是顶点的无序对,无序对常用圆括号“( )”表示。如果UV,且对任意两个顶点u,v∈U有(u,v)∈E,则称U是G的完全子图。G的完全子图U是G的团。G的最大团是指G的最大完全子图。如果UÍV且对任意u,v∈U有(u,v)不属于E,则称U是G的空子图。G的空子图U是G的独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集是G中所含顶点数最多的独立集。对于任一无原创 2020-11-19 11:07:33 · 2247 阅读 · 0 评论 -
【计算机算法设计与分析】7-6 皇后控制问题(C++_拉斯维加斯算法(Las Vegas))
问题描述在一个nxn个方格组成的棋盘上的任一方格中放置一个皇后,该皇后可以控制他所在 的行,列以及对角线上的所有方格。对于给定的自然数n,在nxn个方格组成的棋盘上最少要放置多少个皇后才能控制棋盘上的所有方格,且放置的皇后互不攻击?设计一个拉斯维加斯算法,对于给定的自然数n计算在nxn个方格组成的棋盘上最少要放置多少个皇后才能控制棋盘上的所有方格,且放置的皇后互不攻击。思路解析所谓拉斯维加斯算法即为随机化算法,但是为了保证结果的切实可行,约束随机数必须满足皇后互不攻击的条件,因为并不是每一行都必须有原创 2020-11-19 10:46:30 · 2842 阅读 · 1 评论 -
【计算机算法设计与分析】6-6 n后问题(C++_分支限界法)
问题概述设计一个解n后问题的队列式分支限界法,计算在n×nn\times nn×n个方格上放置彼此不受攻击的n个皇后的一个放置方案。Code#include<bits/stdc++.h>using namespace std;#define N 100int n;struct node{ int vis[N]={0}, col[N]={0}, lr[N]={0}, rl[N]={0}; int x, y; node(int a, int b):x(a), y原创 2020-11-18 19:12:51 · 1401 阅读 · 0 评论 -
【计算机算法设计与分析】6-5 最小重量机器设计问题(C++_回溯法/分支限界法)
问题描述设某一机器由 n 个部件组成,每一种部件都可以从 m 个不同的供应商处购得。设 wij 是从供应商 j 处购得的部件 i 的重量, cij 是相应的价格。设计一个优先队列式分支限界法,给出总价格不超过 d 的最小重量机器设计。对于给定的机器部件重量和机器部件价格,设计一个优先队列式分支限界法,计算总价格不超过 d 的最小重量机器设计。数据输入:第一行有 3 个正整数 n ,m 和 d。接下来的 2n 行,每行 m 个数。前 n 行是 c,后 n 行是 w。Code(回溯法)#inclu原创 2020-11-18 01:40:11 · 9867 阅读 · 2 评论 -
【蓝桥杯_真题演练】 路径计数(C++_dfs)
题目从一个 5x5 的方格矩阵的左上角出发,沿着方格的边走,满足以下条件的路线有多少种?• 总长度不超过 12;• 最后回到左上角;• 路线不自交;• 不走出 5x5 的方格矩阵范围之外。如下图所示,ABC 是三种合法的路线。注意 B 和 C 由于方向不同,所以视为不同的路线。Process因为一次只走一格,因此只要不走重复的点就可以保证路线不自交,其余交给暴搜就可以啦~Code#include<bits/stdc++.h>//Eusing namespace std原创 2020-11-13 23:55:56 · 972 阅读 · 0 评论 -
【蓝桥杯_真题演练】求值(C++_数论)
题目学习了约数后,小明对于约数很好奇,他发现,给定一个正整数 t,总是可以找到含有 t 个约数的整数。小明对于含有 t 个约数的最小数非常感兴趣,并把它定义为 S t 。例如 S 1 = 1, S 2 = 2, S 3 = 4, S 4 = 6,···。现在小明想知道,当 t = 100 时,S t 是多少?即 S 100 是多少?Process直接暴力求解就可以啦~Code#include<bits/stdc++.h>//Dusing namespace std;int原创 2020-11-13 23:52:24 · 723 阅读 · 0 评论 -
【蓝桥杯_真题演练】平方序列(C++_数论)
题目小明想找到两个正整数 X 和 Y,满足• 2019 < X < Y;• 2019 2 , X 2 , Y 2 组成等差数列。请你求出在所有可能的解中,X + Y 的最小值是多少?Process直接暴力求解即可,也可以直接一层for循环,因为是等差数列嘛,只需要知道公差就可以知道第三个数字啦~Code#include<bits/stdc++.h>//Ausing namespace std;int main(){ for(int i=2010;;i++)原创 2020-11-13 23:50:09 · 857 阅读 · 5 评论 -
【蓝桥杯_真题演练】格雷码(C++_位运算)
题目标题:格雷码格雷码是以n位的二进制来表示数。与普通的二进制表示不同的是,它要求相邻两个数字只能有1个数位不同。首尾两个数字也要求只有1位之差。有很多算法来生成格雷码。以下是较常见的一种:从编码全0开始生成。当产生第奇数个数时,只把当前数字最末位改变(0变1,1变0)当产生第偶数个数时,先找到最右边的一个1,把它左边的数字改变。用这个规则产生的4位格雷码序列如下:00000001001100100110011101010100110011011111111010原创 2020-11-05 00:11:00 · 691 阅读 · 1 评论 -
【蓝桥杯_真题演练】激光样式(C++_dfs)
题目x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果?显然,如果只有3台机器,一共可以成5种样式,即:全都关上(sorry, 此时无声胜有声,这也算一种)开一台,共3种开两台,只1种30台就不好算了,国王只好请你帮忙了。要求提交一个整数,表示30台激光器能形成的样式种数。注意,只提交一个整数,不要填写任何多余的内容。题解#inc原创 2020-11-03 00:57:42 · 301 阅读 · 0 评论 -
【蓝桥杯_真题演练】换零钞(C++_遍历)
题目x星球的钞票的面额只有:100元,5元,2元,1元,共4种。小明去x星旅游,他手里只有2张100元的x星币,太不方便,恰好路过x星银行就去换零钱。小明有点强迫症,他坚持要求200元换出的零钞中2元的张数刚好是1元的张数的10倍,剩下的当然都是5元面额的。银行的工作人员有点为难,你能帮助算出:在满足小明要求的前提下,最少要换给他多少张钞票吗?(5元,2元,1元面额的必须都有,不能是0)注意,需要提交的是一个整数,不要填写任何多余的内容。题解#include<bits/stdc++.原创 2020-11-03 00:56:12 · 430 阅读 · 0 评论 -
【蓝桥杯_真题演练】移动距离(C++_数论)
题目X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3…当排满一行时,从下一行相邻的楼往反方向排号。比如:当小区排号宽度为6时,开始情形如下:1 2 3 4 5 612 11 10 9 8 713 14 15 …我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)输入为3个整数w m n,空格分开,都在1到10000范围内w为排号宽度,m,n为待计算的楼号。要求输出一个整数,表示m n 两楼间最短移动距离。例如:原创 2020-10-14 23:08:25 · 312 阅读 · 0 评论 -
【蓝桥杯_真题演练】 牌型种数(C++_dfs)
题目小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。答案3598180思路每个人可以拿13张牌,你只需要枚举每种牌拿了几张,凑到13张,组合数就加一。题解#include<bits/stdc++.h>//3598180using原创 2020-10-14 22:57:51 · 288 阅读 · 0 评论 -
【蓝桥杯_真题演练】加法变乘法(C++_暴搜)
题目我们都知道:1+2+3+...+49=12251+2+3+ ... + 49 = 12251+2+3+...+49=1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+...+10∗11+12+...+27∗28+29+...+49=20151+2+3+...+10*11+12+...+27*28+29+...+49 = 20151+2+3+...+10∗11+12+...+27∗28+29+...+49=2015就是符合要求的答案。请你寻找另外一个可能的答原创 2020-10-14 22:53:59 · 210 阅读 · 1 评论 -
【蓝桥杯_真题演练】三羊献瑞(C++_暴搜)
题干观察下面的加法算式:其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。答案1085思路把算式中的这几个字都换成未知数,因为‘祥’+‘三’产生了进位,且加法进位只可能为1,所以三就代表着数字1,随后枚举暴搜即可得出答案。题解#include<bits/stdc++.h>using namespace std;// a b c d // 1 e f b//1 e c b gint m原创 2020-10-14 22:49:03 · 375 阅读 · 0 评论 -
【蓝桥杯_真题演练】奖券数目(C++_遍历)
题目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。请提交该数字(一个整数),不要写任何多余的内容或说明性文字。答案52488题解#include<bits/stdc++.h>using namespace std;int judge(int a){原创 2020-10-14 22:44:43 · 270 阅读 · 0 评论 -
【蓝桥杯_真题演练】数独游戏(C++_dfs暴搜)
题目你一定听说过“数独”游戏。如:玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。数独的答案都是唯一的,所以,多个解也称为无解。本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。格式要求输入9行,每行9个数字,0代表未知,其它数字为已知。输出9行原创 2020-10-14 22:41:16 · 1523 阅读 · 0 评论 -
【蓝桥杯_真题演练】第九届C/C++省赛B组_I-全球变暖(C++_BFS)
Problem你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:….##….##……##.…####.…###.…其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。例如上图中的海域未来会变成如下样子:……………#………请你计算:依照科学家的预测,照片中原创 2020-08-07 20:51:59 · 415 阅读 · 0 评论 -
【蓝桥杯_真题演练】第九届C/C++省赛B组_H-日志统计(C++_尺取法)
Problem小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id表示在ts时刻编号id的帖子收到一个"赞"。现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。输入格式第一行包含三个原创 2020-08-07 19:36:04 · 286 阅读 · 0 评论 -
【蓝桥杯_真题演练】第九届C/C++省赛B组_F-递增三元组(C++_思维)
Problem给定三个整数数组A = [A1, A2, … AN],B = [B1, B2, … BN],C = [C1, C2, … CN],请你统计有多少个三元组(i, j, k) 满足:1 <= i, j, k <= NAi < Bj < Ck输入格式第一行包含一个整数N。第二行包含N个整数A1, A2, … AN。第三行包含N个整数B1, B2, … BN。第四行包含N个整数C1, C2, … CN。对于30%的数据,1 <= N <原创 2020-08-07 14:57:50 · 246 阅读 · 0 评论 -
【蓝桥杯_真题演练】第九届C/C++省赛B组_E-快速排序(C++_排序)
Problem以下代码可以从数组a[]中找出第k小的元素。它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。请仔细阅读分析源码,填写划线部分缺失的内容。#include <stdio.h>int quick_select(int a[], int l, int r, int k) { int p = rand() % (r - l + 1) + l; int x = a[p]; {int t = a[p]; a[p] = a[r]; a[r] = t;} int原创 2020-08-07 13:10:45 · 240 阅读 · 0 评论 -
【蓝桥杯_真题演练】第九届C/C++省赛B组_C-乘积尾零(C++_数论)
Problem如下的10行数据,每行有10个整数,请你求出它们的乘积的末尾有多少个零?5650 4542 3554 473 946 4114 3871 9073 90 43292758 7949 6113 5659 5245 7432 3051 4434 6704 35949937 1173 6866 3397 4759 7557 3070 2287 1453 98991486 5722 3135 1170 4014 5510 5120 729 2880 90192049 698 4582 43原创 2020-08-07 10:44:45 · 237 阅读 · 0 评论