蓝桥杯到底难不难?(内附第11届省赛+国赛真题解析)

裸睡的猪

共 3250字,需浏览 7分钟

 · 2021-02-09

前几天有粉丝留言蓝桥杯的事,刚好猪哥之前也参加过,就想和大家聊聊关于蓝桥杯的那些事!

今天猪哥会讲讲之前自己为什么参加蓝桥杯,拿到的成绩,以及讲解去年的真题,让大家感受一下真实比赛题目难度!
文章目录:
一、为什么参加蓝桥杯
二、成绩如何
三、蓝桥杯真题解析
四、蓝桥杯与ACM
五、参加有何用

一、为什么去参加蓝桥杯?

为什么说参加蓝桥杯是意外,作为一名三本通信工程专业的学生,可以说学习的课程很杂很杂,大一学过一点计算机课程,但都是很浅的知识,基本可以说和编程毫不相干。
大学浑浑噩噩过了三年,大三暑假想想马上大四,想着找找实习看看自己能干点啥,可是基本都被pass,最后面试的一家安卓开发,笔试就被pass了。
当时真的是纯小白,拿着自己的简历回来了,那年暑假自己一个人呆在寝室,开始自学Java。
大概学了半年,到了大四下学期,在系群里看到有发蓝桥杯报名的信息,当时自己就果断报名了,目的就是想检测下自己Java学的咋样

二、成绩如何?

很遗憾只获得省三,都没有进入国赛,室友在群里看到消息还恭喜我,可自己还是蛮失落的,心里安慰自己就当花钱买了个证书吧!
现在想想,当时自己第一次参加比赛什么都不懂,很多准备工作不足,相信很多参加蓝桥杯的同学比猪哥强吧!

三、蓝桥杯难度如何?

猪哥觉得,题目的好坏从来都不是根据题目难度而定,而是通过题目认清自己对知识的不足。
猪哥参加的是第七届蓝桥杯,个人感觉最近几届蓝桥杯的题目专业度越来越高。省赛和国赛在题目难度上也有很大区别。如果你的目标只是混一张省赛证书,那当我没说;但如果你想进国赛拿国一,就千万别听信“有手就可以”这种鬼话,一定要好好备赛,不然会被虐的很惨。 
今天猪哥就拿 2020年十一届蓝桥杯Python大学组省赛和国赛的各一道真题带大家一起解题,大家也可以自己先试着做一做!

1.十一届省赛题目:单词分析


解题思路:
很多比赛题目不会直接告诉你该怎么做,都是参杂一些故事,这就需要你有很好的审题能力,提炼有用信息,然后再分步拆解,最后用代码实现!
  1. 审题:找出一串小写字符串中 出现频率最高的字母,如果有相同次数的,则按字母排序顺序输出靠前那个!
  2. 拆解:首先获取每个字母出现的次数,然后比较谁出现次数最多,如果出现相同次数可以直接比较字母的ascii码。
我们来根据拆解过程用代码来实现:
方案一:

这种解题思路是比较传统的路线,很容易想到的,基本没用什么函数实现,这里猪哥再提供一种用Python函数去解题的方法:

方案二:

这种解题方案思路就是:
  1. 先使用string.ascii_lowercase拿到26个小写英文字母
  2. 每个字母调用word.count
  3. max函数获取count最大的那个字母
  4. 如果有相同次数的字母也不必担心,因为string.ascii_lowercase本身就是按字典序排的(就是abcd…)
两种方案比较:
方案一是遍历所有字母,方案二是遍历26个字母,所以在数据量少的时候可能方案一有优势,数据量大了肯定是方案二更优,而且方案二只有两行代码,逼格满满!

2.十一届国赛决赛题目:蓝跳跳


这是一道十一届蓝桥杯Python大学组国赛的题目,国赛难度相对高,审题尤其重要!
审题提取有效信息
  1. 最大跳跃长度为k
  2. 每次跳完总长度为L
  3. 不能连续两次跳跃长度大于等于p
  4. 不同的方案有多少种(步数或某个位置不同即可)
审完题后看看给出的样例,猪哥很快想到可以使用动态规划来解题,动态规划(Dynamic Programming,简称DP) 它的核心思想是把一个复杂的大问题拆成若干个子问题,通过解决子问题来逐步解决大问题。
那如何来拆分大问题,解决若干小问题呢?猪哥把自己分析的过程写在纸上了,给大家看看(有不懂的地方留言或截图私我):
1、列出所有方案以便后面找规律
上面猪哥将 总方案数求解分成  第一步小于p第一步大于等于p 分别求解,至于猪哥为什么会这么分,因为感觉条件 不能连续跳p距离 是一个提示点!
2、提炼方案,寻找规律
这里猪哥解释下 L6:小于p 即代表:L=6 第一步小于p的方案数,L5总 即表示:L=5 的总方案数,这是猪哥为了方便记忆随手写的!
上面我们找到 第一步小于p第一步大于等于p  的规律,下一步就是转化为代码形式!
3、将规律转化为代码
上图可看出,我们提取到了两个 for 循环的代码,是分别计算 第一步小于p第一步大于等于p 的代码,下面猪哥把两个加起来就是总方案数,所以这两个for算是核心代码了!
上面我们推导出了核心代码,以及需要存储的数据,接下来我们把全代码写出来!
4、完整代码
这里猪哥直接截图,这样方便阅读,如需源码文末可以获取。

基本每行代码都有注释,自己多看几遍应该可以理解!
5、验证结果
我们把 k=5, p3, L=10 输入,结果输出 397,与题目中给出的答案一致。

但是我们可以看到题目最后给出了测评规模,如果我们用这套代码去测试L=10^18 内存肯定超过512Mb的要求,原因是我们在代码开始的地方生成了一个L长度的二维数组,如果L越大数组就越长,这里我们考虑是否可以优化一下!
6、优化代码
下图最底部猪哥增加了数组长度优化的推导,因为我们在计算当前数据时,只是需要前几个数据,再往前的数据其实是用不上的,所以我们将数组长度缩到最短为 k+1,这样就可以做到循环写入,节省空间!
空间优化后的代码:
将数组长度调整为k+1,增加一个循环的角标,循环写入数据!

关于算法时间的优化猪哥没有仔细研究,但感觉还有优化的空间,如果小伙伴们有更好的优化方案也欢迎讨论交流!

四、蓝桥杯与ACM比较?

一句话概括就是:蓝桥杯是个人形式的国内赛事,而ACM(国际大学生程序设计竞赛)是团体形式的国际赛事。
属性
蓝桥杯
ACM
队伍形式
个人赛
三人团体
赛制
OI 
ACM
分组
研究生组、A组、B组、C组
各学校统一竞争
时长
4小时
5小时
范围
国内
国际
举办单位
工信部人才交流中心
国际计算机协会

ACM是团队协作的成果,而蓝桥杯则直接是个人能力的体现。蓝桥杯更适合不同等级选手:省赛难度相对低,对新手友好;国赛难度大,适合高端玩家展示个人实力,近几年很多ACM选手参加蓝桥杯也证明如此!
猪哥在网上查找了资料,发现很多蓝桥杯国一选手同时也是ACM金奖和IOI金牌选手MI。

虽然有越来越多的大佬参赛,但蓝桥杯从来不是只为大佬服务的精英赛。从蓝桥杯的分组赛制上也能看出来,它更希望通过不同的组别,让每个选手都能在比赛中找到自己的位置,收获自信,了解不足,从而实现以赛促学。

五、参加蓝桥杯有何用?

很多人问猪哥要不要参赛,报名费够吃一顿大餐,去比赛十有八九会打水漂。猪哥觉得,参赛最重要的是过程。常听别人说:过程比结果更重要,参加蓝桥杯就是这样一个典型的例子。


对于全心备战的选手来说,前期刷题、正式比赛、赛后复盘,这是一条不断认清自我,完善自我的求知之路。这条路走得越远圈子越大,见识和眼界也变的越广,在此过程中还能结识一群志趣相投的好友,大学生活也因此变得充实而愉快,在不知不觉中你渐渐变强,也渐渐变成同学口中的大神!


猪哥在自学完Java后参加蓝桥杯虽然只拿了省三,但是真的对自己鼓舞很大,因为那是我第一次得到了认可,得到了同学的夸奖,对自己的编程能力有了一定的信心。


在后来找工作时,我把比赛的经历写进了求职简历中,不但给面试增添了一些自信,入职后还被任命为开发小组长的职务!


猪哥以一个过来人的经验建议大家:如果你现在还在上大学,一定要参加一次蓝桥杯,从现在到3月底刚好是第十二届蓝桥杯大赛的报名阶段。从这一刻开始,让自己变成自己仰慕的那个人!


本文的源码:https://github.com/pig6/lanqiaobei
点击阅读原文可以阅读报名事宜!
浏览 122
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报