蓝桥杯十大常见天阶功法——音之呼吸.肆之型.模拟

鬼灭

友友们好(^-^)🌹🌹🌹,我是杨枝,一枚在算法领域迈步的呆萌的博主呀~
目前还是一只纯纯的菜汪🐶。 典型的又菜又爱闹那种👀,做不好很多事,说不好很多话,写题还总不Ac😅,还在努力还在前进👣。
因为了,你们对我来说都是是独一无二的呀💓。在点开这篇文章的那一刻,我相信,我们之间相互需要彼此啦🌹🌹
时刻谨记:认真写算法,用心去分享。不负算法,不误卿。 感谢相遇(^㉨^)。

蓝桥杯的十种呼吸法是笔者结合自己的学习筛选出来的十个知识点。本着像看漫画一样了解算法原理。当日后自己确实遇到相关的习题了,可以再回头结合着我的题解报告来加深理解喔。

往期精彩
🔖蓝桥杯十大常见天阶功法——水之呼吸.壹之型.递归


🔖蓝桥杯十大常见天阶功法——虫之呼吸.贰之型.二分


💓关于蓝桥,关于专栏,关于建议,关于您🌹

最近和执梗博主一起运营了蓝桥杯31日冲刺打卡群(因为陆陆续续的加入不便于管理,现在闭群啦,hh~)。

说一下自己的主观感受吧,从小伙伴在群里的提问中,是可以感觉,存在一部分小伙伴对蓝桥竞赛、对如何系统的学习算法、对一些基础算法的概念以及oj是怎么测评的等等,是不太清楚的。
因为我自己也还是菜狗,思考问题的方式可能也不全面,思维也还在逐渐完善。这里了,结合自身情况,浅谈自己的拙见吧🌹🌹🌹

爱你

这里是我看到的一小部分现象,作为我不是乱说的支撑吧~
现象

一、关于蓝桥

蓝桥是可爱的OI赛制,填空题是只要一个答案,可以本地编译器把跑结果了,然后直接输出这个结果就好,对了就得分。

对于编程题就是过样例,依据样例得分,出题人设置的样例都过了,那就满分。需要注意的是:你可以重复提交的,评判的结果是以最后一次提交结果为准。

注意

危险

我感觉比较重要的就是这些了,其他的,可以在参赛注意事项中了解到,我就不唠唠叨叨的赘述了

二、关于专栏

我自己在写的这个呼吸之法专栏是趁着看完鬼灭之刃漫画的劲儿,顺势将自己在acwing学算法,备赛蓝桥中看到常见知识点总结出来。

计划的是:
水之呼吸-壹之型-递归;
虫值呼吸-贰之型-二分;
炎之呼吸-叁之型-动态规划;
音之呼吸-肆之型-模拟;
霞之呼吸-伍之型-数论;
恋之呼吸-陆之型-双指针;
雷之呼吸-柒之型-搜索;
风之呼吸-捌之型-图论;
岩之呼吸-玖之型-贪心;
火之神乐-拾之型-高级数据结构。


初步是这种敲定的,可能存在微调,这些年蓝桥也不再是那么简单暴力了,要掌握的也就逐渐增加了。

至于写作风格,与壹之型的递归;贰之型的二分差不多,知识点加上历届真题中有代表性的。文章中真题的数量就取决于漫画吧,比如郭游篇有11集, 我这里就放了11道。
比较活泼,多图,自己也还在不断优化排版,最基本最基本来说,自己看了以后,我知道为什么要记录这个真题,可以很快的获取到它的考点是什么,需要掌握的技巧是哪些。
同时也想看我文章的小伙伴以及我自己,看着是舒服的,是没有视觉疲劳。

溜了

三、关于建议

假如您对蓝桥要考的算法有大致的知识框架了,自己也是练真题了,那我更建议您订阅我好兄弟执梗的文章。他更的每篇文章是一套蓝桥真题,对您更有帮助。

我把它主页放这里了:

执 梗 — 个人简介:生与夜叉,忠于桔梗,意为执梗。记录学习历程,分享心中所爱

憨憨

假如您对蓝桥、对算法竞赛大致的考点不太熟悉,你可以跟着我这个博客学习,我自己用通俗易懂的话把知识点总结出来,同时放上一系列十分具有代表性的例题。

我自己的建议是先大致看一遍文章,心中有个印象就可以了,心中知道:有篇博客讲过这个知识点,还有很多真题。我今天刚好遇到这个真题了,结合着这位博主的题解和总结再理解一下这个知识点。

四、关于您

假如您在冲刺群了,希望跟着小伙伴们一起打卡,里面的讨论氛围真的很好了。倘若自己应该还有额外的练习,那么这个月150+ 的刷题量应该是有的,根据我了解的,省赛拿奖怎么都没有问题的啦~

假如您有自己的集训队,这是最好的啦~,好好跟着训练😜

假如都没有,那就得对自己严格一些了,记住为学日进,相信乾坤未定🌹🌹🌹

为学日进


好啦~正式进去花街,开始游郭篇的历练了

💓对模拟和枚举的认识

模拟其实是一个比较宽泛的概念了,一般来说,不是常规的最短路问题,比如它不是用动归规划解决的最优解,不是贪心,也不是最短路问题的时候,就可以考虑能否用模拟结合枚举进行解题。

枚举这个理念的出现倒是比较直接简单了,在认知中,就是循环嘛。
简单来说,也就是暴力嘛。这个了,确实是这么一回事儿。

可能人人都会写枚举,但不一定写出来的枚举就可以Ac。正是因为枚举的思想是挺直接简单的,所以枚举的考点放在了细节的处理上

待会就系统结合的枚举的历年真题,切实的感受一下它的玩法,以及总结一些枚举中经常用到的小技巧和思考方向

转圈

枚举首先要考虑的是如何在遍历的途中,把咱们需要的答案查找出来。

既然是可以直接暴力获得部分的分,那么就可以通过题目中隐藏的信息进行优化的。

还有一个比较重要的知识是,如何通过给定的数据范围确定自己最多可以进行几重循环。这个我在壹之型中总结了。

因为没有模板,模拟的题了,要么都会,此时需要注意的是细节;要么都不会。

不像其他算法,比如,我忘记SPFA的模板怎么写了,执梗记得,那么我就没有这个分了。模拟说直白点了,确实就是循环,但是怎么循环也是一门学问了,看能不能get到题目中的隐藏的信息,以及处理好一些小技巧。模拟的题,细节是真的多。


💓一触即发

🌟第一话、第十届蓝桥杯省赛C++B组 特别数的和

这道题是热身的,就不存在特别需要注意的点啦~

嗦嘎

进入题目描述环节

🌱题目描述

试题 历届真题 特别数的和
原题传送门

🌴解题报告
这个题算是枚举中相当乖的一道题了,读完题目以后,脑海中确实很难把它归纳到某一类专门的算法中,此时就乖乖的拿出我们的枚举大法吧。

太好了

解题思路:

枚举输入的范围内的中每一个数,然后将这个数,比如是39,用取模运算符和整除运算符将39中的每一位都取出来。
最后用语句 i f if if来判断是否含有 2 、 0 、 1 、 9 2、0、1、9 2019这几个数字。

🌵参考代码(C++版本)
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    
    int res = 0;
    for(int i = 1; i <= n;i++)
    {
        int x = i;
        while(x)//当这个数还存在的时候,就持续取它
        {
            int t = x %10 ; //取出个位
            x /= 10;        //删掉x的个位
            if(t == 2 || t == 0 || t == 1 || t == 9)
            {
            	//将符合条件的数字累加起来
                res += i;
                break;
            }
        }
    }
    //输出结果
    cout << res << endl;
    return 0;
}

快乐迈入第二话
加油

🌟第二话、第四届蓝桥杯省赛C++A/B组 错误票据

这道题最主要的思想是对于一串数据,可以先处理为字符串。那么此时就要考虑:
1、字符串的读入
2、怎么把字符串处理为其他类型的数据
🌱题目描述

试题 历届真题 错误票据【第四届】【省赛】【B组】
原题传送门

🌴解题报告

这道题难度也是不大,将输入的 n n n行数据进行排序之后,再逐一枚举这 n n n个数。

如果相邻的两个数的数值相同,就是重号;如果相邻的两个数,数值只差大于等于2,比如 3 3 3 5 5 5。那么就是断号

比较棘手同时也是需要掌握的是这道题的输入技巧。【重点】

重点

1、掌握cin的读取原理:

当 cin读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。

一旦它接触到第一个非空格字符即开始读取,当它读取到下一个空白字符时,它将停止读取。

因为咱们要读取的这串数据中有太多空格,而且数量也是未知,所以cin和scanf都劝退

劝退

2、getline函数

为了解决这个问题,可以使用 getline 这个函数。它可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中。

使用的语法如下:

getline(cin, inputLine);//其中 cin 是正在读取的输入流,而 inputLine 是 string 类型的变量,用于接收输入的字符串
//题目中的使用代码
 getline(cin,line);

3、stringstream快速实现string类型和int类型之间的转换

< sstream > 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、流的输出和流的输入输出操作。

🌵参考代码(C++版本)
#include <iostream>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <string.h>

using namespace std;

const int N = 10010;
int n;
int a[N];

int main()
{
   
    int cnt;
    cin >> cnt;
    
    string line;
    
    //第一个坑
    getline(cin,line);//注意!这里用于忽略掉第一行的回车。引入输入cnt之后,是有一个回车的。要解决它
    
    while(cnt--)
    {
   
        //正常的使用getline函数来读入
        getline(cin,line);
        
        //把line这个字符串中的信息,通过stringstream加载到ssin中
        stringstream ssin(line);
        
        //因为 stringstream是输入输出流,此时Ssin就可以像cin一样,将ssin中存储的信息,输入到数组a中
        while(ssin >> a[n]) n++;
    }
    
    sort(a,a+n);
    
    // for(int i = 0;i < n;i++) printf("%d",a[i]);
    //输出效果如图,可以看到输入数据中的空格现在没有了:568991011127
    
    int res1,res2;
    for(int i =1;i < n;i++)
        if(a[i] == a[i-1]) res2 = a[i];//重号
        else if(a[i] >= a[i-1]+2) res1 = a[i]-1;//断号
    
    cout <<  res1 << ' ' << res2 << endl;
    
    return 0;
}

🌟第三话、第六届蓝桥杯省赛C++B组 移动距离

移动距离主要想让大家了解曼哈顿距离,其次是再次熟悉一下映射的思想。
🌱题目描述

试题 历届真题 移动距离【第六届】【省赛】【B组】
原题传送门

🌴解题报告

这道题应该是可以用宽搜来做的,一题可以多解,但是打比赛的时候,找到一个对于自己而言,选择一个写起来简单,也不容易错的算法就好。

对于折线求最短路径,可以使用几何学中的曼哈顿距离进行求解。结合公式,只要知道两个位置的坐标,就可以快速算出距离。

曼哈顿距离概述:

曼哈顿距离的命名原因是从规划为方型建筑区块的城市(如曼哈顿)间,最短的行车路径而来。

曼哈顿距离的计算:

在平面上,坐标 ( x 1 , y 1 ) (x_1, y_1) x1,y1的点 P 1 P_1 P1与坐标 ( x 2 , y 2 ) (x_2, y_2) x2,y2的点

评论 163
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值