![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯备战
Zhou Xuanhong
这个作者很懒,什么都没留下…
展开
-
2021蓝桥杯国赛真题
最近一直没有在学习。蓝桥杯侥幸进了决赛,要好好准备一下,不能像省赛时候一样混了。今天开始好好学习,认真记录一下。A5分B5分直接暴力枚举C0分这题答案是977,我写成了978,是因为文件读入的时候,把最后一行的空行也读入了,因此要注意文件写入时候的格式,文件要检查一下是否标准。本题我的做法就是用excel弄出日期,然后放到文档里文件写入,十分方便。本题主要学习文件读入的写法。#include<iostream>using namespace std;#i.原创 2022-04-30 12:46:40 · 494 阅读 · 0 评论 -
专题 图论
求最短路径迪杰斯特拉算法1/*算法思路: 1.初始化距离 dist[1]=0,dist[i]=正无穷 2.集合s存当前已经确定最短距离的点 for i 1-n 找到一个不在s中且最短的t 将t放到s中 用t更新其他点的dist 时间复杂度O(n方) */ #include<iostream>#include<algorithm>#include<cstring>#include <climits&g原创 2022-03-10 21:32:24 · 244 阅读 · 0 评论 -
第十二届省赛
得分ABD得分20正确C得分0不会EF得分15原创 2022-03-10 20:24:43 · 185 阅读 · 0 评论 -
第九届蓝桥杯真题
题目链接ABC题正确D原创 2022-03-07 21:58:11 · 149 阅读 · 0 评论 -
专题 拓展欧几里得算法
介绍一下欧几里得算法欧几里得算法也称为辗转相除法,用于计算两个数的最大公因数,一般用gcd(a,b)来表示a和b的最大公因数设a、b均为正整数,则gcd(a,b)=gcd(b,a%b)实现方式:(递归实现)这个模板要会背!int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}手推拓展欧几里得公式需要理解,必要时能推出来,也不难代码在这里插入代码片//拓展欧几里得算法 #include&原创 2022-03-01 15:36:24 · 217 阅读 · 0 评论 -
2.27 算法练习
序列处理/*给定一个长度为 n 的整数序列 a1,a2,…,an。我们可以对该序列进行修改操作,每次操作选中其中一个元素,并使其增加 1。现在,请你计算要使得序列中的元素各不相同,至少需要进行多少次操作。输入格式第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。输出格式一个整数,表示所需的最少操作次数。数据范围前 6 个测试点满足 1≤n≤10。所有测试点满足 1≤n≤3000,1≤ai≤n。输入样例1:41 3 1 4输出样例1:1输入样例原创 2022-02-27 14:12:02 · 1316 阅读 · 0 评论 -
2.26 算法练习
区间覆盖 区间覆盖区间问题都写完了,发现区间问题在考虑贪心的时候,大多数都是先对左端点或者右端点排序。然后再考虑贪心的策略!代码/*给定 N 个闭区间 [ai,bi] 以及一个线段区间 [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。输出最少区间数,如果无法完全覆盖则输出 -1。输入格式第一行包含两个整数 s 和 t,表示给定线段区间的两个端点。第二行包含整数 N,表示给定区间数。接下来 N 行,每行包含两个整数 ai,bi,表示一个区间的两个端点。输出格式输原创 2022-02-26 11:20:08 · 67 阅读 · 0 评论 -
2.24 算法练习
藏匿的刺客藏匿的刺客用时 1min 得分100因为我发现这个其实就是区间选点,果然acwing很不错代码就不提交了原创 2022-02-24 08:44:18 · 719 阅读 · 0 评论 -
2.23 算法练习
区间选点这是一道贪心题,之前我对贪心的认识很浅显,就认为是给了题目直接贪心,像这道题目还需要先排序二维数组快速排序方法!!!真的很重要一开始我用的是冒泡排序法,代码较长而且时间复杂度较高,在网上查询了一些算法之后,发现使用sort 构造cmp函数,然后将数组转化为结构体使用比较方便且快捷接下来写几个练练手sort排序1.用cmp控制一维数组升序和降序#include<iostream>#include<algorithm>using namespace原创 2022-02-23 10:00:53 · 637 阅读 · 2 评论 -
2.22 算法练习
说明感觉之前写的文章都很水,都急着提交,质量不高,现在要把文章质量提高一些,数量上不做要求。24点24点做题情况26min完成 评测60分60min修改完成 评测100分思路直接使用dfs搜索即可,注意判断整除情况此外对于不具备交换律的除法,不必要都给出a-b和b-a的递归,因为在大的for 循环中已经做到这一点了思路很简单,但是出错原因是单纯的dfs设置layer为4的出口,会导致元素之间只是某个或某几个元素与一个元素结合,没有考虑到两堆元素,每堆两个元素结合的情况,即(a+原创 2022-02-22 16:43:13 · 230 阅读 · 0 评论 -
第十一届省赛
D典型的日期问题模板#include<iostream>using namespace std;int judge(int year){ //判断是否为闰年 if(year%400==0||(year%4==0&&year%100!=0)) return 1; return 0;}int main(){ int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //日期问题三个for循环原创 2022-02-21 16:23:30 · 368 阅读 · 0 评论 -
蓝桥杯第十二届真题
本文章会持续更新时间显示时间显示#include<iostream>using namespace std;long long n;long long second;int main(){ cin>>n; second=n/1000; long long sec=second%60; long long min=(second/60)%60; long long h=(second/3600)%24; if(sec<10){ if.原创 2022-02-14 19:35:44 · 7830 阅读 · 0 评论 -
线性DP (基础题已更新完毕)
今天周五,有点混,就写一点吧,明天好好学习!数字三角形基本是dp的hello world题目了,复习一下/*状态表示: dp[i][j]表示所有路径到(i,j)的数字和中的最大值 状态转移方程: 某一点的最大值可能是从左上方或者右上方走过来的,就比较这两个即可考虑到数字在数组中的存储位置,我们得到如下的状态转移方程dp[i][j]=max(dp[i-1][j]+g[i][j],dp[i-1][j+1]+g[i][j]) */#include<iostream>.原创 2021-11-26 16:25:20 · 87 阅读 · 0 评论 -
DFS 考前临时抱佛脚
题目题目链接复习的时候建议用for循环写一下,现在不太想写代码/*因为同时可以思考同一科目的两道问题,假设分为left right左右脑那么对于n道题目,有2^n种可能,一般一秒可以跑4 * 10 ^ 8次该题最大范围是4* 2^20 =4*1048576 是可以直接暴搜的 把这道题目的搜索想成一棵二叉树的搜索左子树是左脑,右子树是右脑然后就是正常的dfs dfs 中的x是已经做了多少道题目,y是当前科目的题目的总数量,如果x比y大了,那就是一种方案了 */#inclu原创 2021-11-24 19:12:45 · 154 阅读 · 0 评论 -
DFS 八皇后
题目题目连接代码八皇后的题目,很经典的,多看看/*dfs的经典题目八皇后 */#include<iostream>using namespace std;const int N=20;int g[N][N];int column[N],dig[3*N],tdig[3*N];int n;long long ans=0;int print_ans=0;//分别是列,对角线,反对角线,用于判断皇后是否可以放置 //我们按照行遍历 void dfs(原创 2021-11-23 19:49:25 · 76 阅读 · 0 评论 -
dfs 填涂颜色
早⑧今天莫名五点醒了,不过肯定是继续睡。然后来上早⑧,无语的是,电脑没电了然后教室还没插座我根本不想用机房的LJ电脑,但是无奈需要学习,勉强用这个做个算法题目题目题目链接代码这道题目其实很好哇首先,如何判断是墙是一个难点。我一直想的是怎么做一个flag然后标明这个是墙的附近,然后又怎么知道哪些点属于墙的内部的呢。这也太难了额那么就换一种思路,这么想,既然难以确定墙内的点,那就确定墙外的点吧。这样思路就很明确了,直接从开头dfs,遇到墙就退回去找别的口。但是这样做又会遇到问题就是开头的原创 2021-11-22 09:29:55 · 112 阅读 · 0 评论 -
背包问题 复习一下 然后 学习一下
最近混了几周,最近慢慢有些进展复习一下之前学的dp一、01背包思路写在注释里了,很快就写好了,这个写了好几次印象比较深刻/* 01背包问题 */#include<iostream>#include<algorithm>using namespace std;const int M=1100;int N,V;int items[M][2];int state[M][M]; int main(){ cin>>N>>原创 2021-11-20 17:47:09 · 194 阅读 · 0 评论 -
洛谷 吃奶酪
标题题目链接代码这题我还没做出来,用DFS能算出正确结果,但是会超时,先记录下来。本周会更新的。(?)/*深搜给dfs添加一个参数step 估计要超时 */ #include<iostream>#include<math.h>#include<ctime>#define bias 220//我们平移格子,将所有的坐标都加上220using namespace std;const int N=400;int n;int g[N][原创 2021-11-17 20:58:19 · 205 阅读 · 0 评论 -
DFS 洛谷 Lake Counting S
题目题目链接代码/*dfs周围的8个是相邻的水坑因此只需要从某个点出发(遍历着出发)然后沿着该点往下走,直到没有坑了,走过的路要做上标记 靠!我怎么又错了一个测试点想想细节: 1.全是水,全是土地 没错 我看了出错的数据 看不太出来哪里错啊 无语了 我知道哪里错了 这个判断yy<=m 我写成了yy<<m 这样都能一开始过9个点就离谱 */#include<iostream>using namespace st原创 2021-11-16 17:12:18 · 260 阅读 · 2 评论 -
BFS 洛谷 Meteor Shower S
题目题目链接代码先简单写一下吧,这道题目说多了都是泪细节太多了/*本题又包含了一个时间上的维度,因此需要在判定的时候多加一个判定条件 首先不看时间,求出哪些点是永远安全的,如果bfs的时候正好到了这个点那么就可以直接输出了 */#include<iostream>#include<queue>using namespace std;const int N=500;//只是说陨石会砸在一片(300,300)的区域,没说农场多大,因此这里开大一点原创 2021-11-15 20:37:32 · 231 阅读 · 0 评论 -
BFS 洛谷奇怪的电梯
题目题目链接代码思路大概都是很像的,只不过是细节上的处理需要注意蓝桥杯上看不来了错误的数据,因此一定要把很多特殊情况都考虑到,这些特殊情况需要在平时的训练中总结思考本题的细节有:1.走到的楼层不能超过限度2.该楼层需要没有被走过3.可能在某层但是往下走的步数为04.刚开始的步数永远是一个坑点,需要单独考虑如果不对开始点操作的话,很可能会走出去然后又回到起始点#include<iostream>#include<queue>using namespace原创 2021-11-13 17:27:30 · 136 阅读 · 0 评论 -
BFS 洛谷 马的遍历
题目题目链接代码这题要多看看,是BFS的典型例题啊另外要学会格式化输出默认为右对齐,加个负号是左对齐宽几格用数字代替例:printf("%-5d",x);/*BFS 广度搜索出最短路径难点在于,如何确定哪个点走不到 ans:直接给每个走过的点标记,直到后面走不了了,然后return就行 没有标记的点就是走不到的点 深搜是需要队列的,差点忘了。。。。 深搜是队列!!!刚开始加入初始化状态,然后遍历刚开始的可能 然后把每次能遍历到的放在队列中,现在放在队列里面的都是上原创 2021-11-12 15:33:58 · 79 阅读 · 0 评论 -
DFS 自然数的拆分
题目题目链接代码#include<iostream>using namespace std;const int N=10;int path[N];int n;void dfs(int sum,int layer){ if(sum>n) return; if(sum==n){ for(int j=1;j<layer-1;j++) cout<<path[j]<<"+"; cout<<path[layer-1原创 2021-11-11 11:30:15 · 133 阅读 · 0 评论 -
DFS 洛谷 单词方阵
题目题目链接代码/*给n*n的字母方阵,内可能蕴含多个“yizhong”单词。词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用*代替,以突出显示单词。例如:输入: 8 输出: qyizhong *yizhong gydthkjy gy****** n原创 2021-11-10 17:12:13 · 59 阅读 · 0 评论 -
DFS 洛谷 迷宫
题目题目链接思路及代码就是直接暴搜就可以,因为走过的路径不能重复,所以要设置一个判断的数组用于标识哪些点走过(这个过程在debug中还挺有趣的,可以观察到一个点在迷宫探寻然后碰壁又返回的过程)其他有两点要注意,这两点导致我开始两次提交都没有AC1.注意起点要设置为已经走过,不然一个点可能会从起点出发又经过起点,导致错误2.题目中有个小坑,它保证了起点是没有障碍的,但是没有说终点没有障碍,以后做题目时候,对于这样的情况需要考虑清楚#include<iostream>using原创 2021-11-09 16:30:42 · 94 阅读 · 0 评论 -
2021-11-8 DFS 洛谷练习题
题目题目链接代码和思路明白知乎上姥姥说的话了,没有天赋的人也可以靠记忆打算法竞赛,题目做的多了,自然而然就知道他们其实是一类的,然后自然就会了#include<iostream>#include<math.h>//我把这个称为带状态的搜索 using namespace std;const int N=20;long long a[N][2];int n;long long ans;int first;void dfs(int layer,lon原创 2021-11-08 09:17:56 · 84 阅读 · 0 评论 -
DFS 选数(去重全排列)
题目题目链接代码这个题解方法是真的好!!!!!!一定要仔细看一下/*这题主要是一个去重的dfs,而且将函数的参数设置为三个,真的无比巧妙啊 */#include<iostream>#include<math.h>using namespace std;const int N=22;int a[N];int n,k;long long ans;int check(int x){ if(x==2) return 1; for(int原创 2021-11-07 17:51:01 · 278 阅读 · 0 评论 -
最长公共子序列(啊西,没写完,先发了吧)
最长公共子序列这个算法时间复杂度为O(n方)/*最长公共子序列 给定两个序列,求出最长的公共子序列 思路: 使用dp[i][j]作为第一个串的前i位,第二个串的前j位的最长公共子序列的长度 那么有状态转移方程 一、如果A[i]和B[j]相同 dp[i][j]=max(dp[i-1][j-1]+1,dp[i][j]) 二、如果不相同 dp[i][j]=max(dp[i-1][j],dp[i][j-1]) */#include<iostream>using nam原创 2021-10-15 11:15:12 · 48 阅读 · 0 评论 -
蓝桥杯备战——Day 11 最长公共子序列
好难懂啊,那个二分/*最长上升子序列(选取一组数中的子序列,可以元素不相邻,但是需要递增) 本题是一个模板 */#include<iostream>#define n 7using namespace std;//一、O(n方)做法//一个dp数组,其中dp[i]的意思是以第i个元素结尾的最长上升子序列长度void func1(int a[],int dp1[]){ for(int i=1;i<=n;i++){ dp1[i]=1;//每个元素的初始化的最长原创 2021-10-12 20:16:14 · 115 阅读 · 0 评论 -
蓝桥杯备战——Day 10 摆花
题目题目链接思路早八课上写的题目yysy这题我写题解时候还不会,但是我觉得没必要淤在这上。我的收获就是这题的状态转移方程,但是这个初始化实在让我难以弄懂,以后再搞吧代码/*摆花dp一、定义状态 定义dp(i,j)为i种花摆放j盆的方案数二、定义状态转移方程 因为第i种花可能的取值有0,1,2....ai 因此,考虑只摆放i-1种花,然后枚举第i种花可能的数量,(注意花盆数最多不能超过m个)因此可得状态转移方程 dp(i,j)=求和dp(i-1,j-k),k从0到ai(要保证j-原创 2021-10-11 12:01:46 · 185 阅读 · 1 评论 -
蓝桥杯备战——Day 9 编辑距离
题目题目链接终于开始写题目了,这个周末算是混过去了周六睡,和学长踢球,以后每周都去中苑踢球了,那个草舒服周日睡,参加英语竞赛,太难了(不过我感觉还能对不少,不过和我竞争还有英语专业的大四学姐)于是我权当去玩了,提前交卷走了,不期待拿奖(结果后天就出来了????)然后我就写了这道题目,反正也不会,就是感叹一下写题解的人真的很厉害思路思路如下:一、定义状态: dp数组为dp[i][j]表示将A的前i个元素变成B的前j个元素的最少步数二、状态转移方程: 对于某一个状态,我们有如下几种可能原创 2021-10-10 19:42:41 · 161 阅读 · 1 评论 -
蓝桥杯备战——Day 8
Day 8没有写因为我上午上了线下课然后下午又把论文弄了好在是终于改完了论文。希望可以快点进入技术性文章的写作原创 2021-10-09 10:49:36 · 81 阅读 · 1 评论 -
蓝桥杯备战——Day 7 挖地雷 (鸽了但没完全鸽)
**题目题目链接**背景我必须得吐槽一波这题,昨天一直没有思路,是因为我理解有误(还是题目描述不清),我把这个想复杂了,我给想成类似于一个图,然后可以来来回回走,但是,实际上就是一条路径直接走到底,不走回头的。这样就太简单了,之前我想的那种,只要是某一个房间和其他房间之一都不是断开的,然后就可以走来走去,很可能把所有房间都走遍了,这样也就无所谓最大值呃。说来离了个大谱,昨晚(准确来说是今晚)我没睡着,就躺在那,反正也没事干我在想这个题目,我想了一种回溯的方法(我按照那个理解错的方式想的思路,当然不行原创 2021-10-07 08:42:45 · 99 阅读 · 0 评论 -
蓝桥杯备战——Day 6 鸽了
鸽了今天下午和梓涵吃了个饭,晚上去小龙????老师办公室然后回了寝室直接跟源桑打了FIFA,到现在其实也写了一小时题目,but,那个题目我没写出来而且我对题解很不理解,明天再说服了原创 2021-10-06 21:47:27 · 88 阅读 · 0 评论 -
蓝桥杯备战——Day 5 滑雪
题目链接思路这是一道相对来说比较难的dp题了(对我来说) 我的思路是: 因为这些数字的大小是无规律的,因此,我们需要找到从每一个点出发,所能走过的最大的路经长度这个显然要用到递归然而如果每个点都按照上下左右这样来递归探寻,最坏时间复杂度为O(mn的mn次方)(不知道是不是这么算的,我把常数去掉了)这样肯定会超时 因此我们需要用dp来记录:假设这个点具有dp值,那么说明它已经被搜寻过并且该点的最大路径值就是dp值,我们可以直接用代码```cpp#include<iostrea原创 2021-10-05 10:09:37 · 142 阅读 · 1 评论 -
蓝桥杯备战——Day 4 过河卒
题目题目链接思路过河卒问题因为小卒只能向右或者向下走,那么可到达某一点的路径即为左面点和上面点路径之和, 其中一个有9个被马控制的点我们利用dp数组,将马能控制的地方都设为-1,其余地方设为0 我的代码我的代码有点麻烦(就是在那个判断被????控制住的点的时候)因此后面填充dp的时候也有点麻烦了/*过河卒问题因为小卒只能向右或者向下走,那么可到达某一点的路径即为左面点和上面点路径之和,其中一个有9个被马控制的点我们利用dp数组,将马能控制的地方都设为-1,其余地方设为0原创 2021-10-04 16:19:40 · 230 阅读 · 0 评论 -
蓝桥杯备战——Day 3采药2
题目题目链接思路Day2同种类型的题目,只不过这个是一种物品可以放多个则使用一维数组最为简单,或者说你可以依旧使用二维数组,但是中间要加一个for循环,判断拿几个的时候价值最大代码#include<iostream>#include<algorithm>using namespace std; long long t,m;long long dp[10000002]={0};long long a[10002][2];int main(){ cin>原创 2021-10-03 10:36:02 · 117 阅读 · 0 评论 -
蓝桥杯备战——Day 2 采药1
介绍本系列是记录我备战蓝桥杯刷题记录题目题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 7 3 8 8 1 0 2 7 4 44 5 2 6 5在上面的样例中,从 7 \to 3 \to 8 \to 7 \to 57→3→8→7→5 的路径产生了最大输入格式第一个行一个正整数 rr ,表示行的数目。后面每行为这个数字金字塔特定行原创 2021-10-02 19:27:28 · 154 阅读 · 0 评论