AcWing
Bayern2JZ
这个作者很懒,什么都没留下…
展开
-
蓝桥杯算法笔记<9> BFS基础
BFS是蓝桥杯中特别常用算法之前学习BFS已经有一段时间了,以至于现在实现起来还是不太熟qwq八数码:在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到原创 2021-04-09 21:10:07 · 189 阅读 · 0 评论 -
蓝桥杯算法笔记<8> 高精度系列
高精度加法高精度加法归根结底是一个模拟人工加法的过程大致要点如下Ⅰ.使用两个数组a,b倒序存储输入的数字,这样能比较方便地处理进位问题Ⅱ.在进行加法地过程中,使用一个指针 i 指向当前正在相加的位置,并开一个t变量存储进位Ⅲ.如果a[i]或b[i]存在,就使得t加上 a[i]或b[i]Ⅳ.向结果数组c中加入t%10Ⅴ.t=t/10 完成进位,为下一轮运算的进位作准备Ⅵ.(易错)在循环相加各个位之后,t中仍然可能有残余的数字没有加入到结果数组中,如50 + 50 这种场景,循环后c数组中为00原创 2021-03-29 18:06:58 · 99 阅读 · 0 评论 -
蓝桥杯学习笔记<7> 递归,递推与DFS
1.递归实现指数型枚举从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3代码:#include<iostream>#include<cstdio原创 2021-03-23 18:35:57 · 170 阅读 · 0 评论 -
蓝桥杯算法笔记<6>数论基础
质数,最大公约数等等和处理数字有关的题目会经常出现在算法题中。对于常见的处理方式,应该背一个最优解的模板。1.求最大公约数最大公约数:也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。在实际做题时,辗转相除法(有时也叫欧几里得算法)是最大公约数的一种常用的求法int gcd(int a,int b){ return b ? gcd(b ,a % b) : a;}...原创 2021-03-13 10:03:56 · 189 阅读 · 0 评论 -
蓝桥杯算法笔记<5>贪心基础
贪心的思想即在每一步中,采取某种短视的做法达到局部最优解,在完成所有步骤后,就达到了全局的最优解。这种算法属于较难的一种,既没有固定的套路/模板,而且某些贪心问题也比较难以证明,在实际做题时,需要多积累一些贪心模型,遇到实际的问题时,尽量往已经收悉的模型上靠,这样能降低一些解题难度。例题1:股票买卖题目链接:acwing.1055数据范围为十万,所以只能选用时间复杂度为n或者nlogn的算法。值得注意的是,很多贪心问题在实现的时候,都是先排序,然后再采用某种策略进行选择。(这题中并没有排序)在原创 2021-03-08 21:08:46 · 110 阅读 · 0 评论 -
蓝桥杯算法笔记<4>使用vector存图
图的存储有多种方式,对于稀疏图,可以用邻接表来存储,对于稠密图,可以用邻接矩阵存储在实际的考试中,使用vector(动态数组)能十分便捷地存储稀疏图例题:第四届蓝桥杯A组真题:大臣的旅费题目链接:https://www.acwing.com/problem/content/description/1209/这题中,需要存储节点数量较大, 属于稀疏图需要使用vector存图后,找到图的直径闫老板在相关讲解中,提到了如下几点:1.定义一个结构体 ,第一个点是编号,第二个是长度,这个结构体用于原创 2021-03-08 11:31:20 · 531 阅读 · 0 评论 -
BFS基础 地牢大师
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N = 110;struct Point{ int x, y, z;}; Point q[N * N * N]; //用于宽搜的队列int l, r, c; //用于表示层数,行数和列数int dist[N][N][N]; //用于记录是否搜过了char g[N][N][N];原创 2021-03-07 20:45:42 · 104 阅读 · 0 评论 -
蓝桥杯算法笔记<3> 模拟
先引入一个例题:Acwing 1210.连号区间数小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N 的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。输入格式第一行是一个正整数 N,表示排列的规模。第二行是 N原创 2021-03-04 19:31:10 · 162 阅读 · 1 评论 -
蓝桥杯算法笔记<2> 基础前缀和
k倍区间给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6首先考虑暴力算法,枚举所有的区间,并统计符原创 2021-03-01 11:24:10 · 141 阅读 · 0 评论 -
蓝桥杯算法笔记<1>二分
二分算法的例题给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤原创 2021-02-24 22:40:47 · 123 阅读 · 0 评论