蓝桥杯到底难不难?(内附第11届省赛+国赛真题解析)
一、为什么参加蓝桥杯
二、成绩如何
三、蓝桥杯真题解析
四、蓝桥杯与ACM
五、参加有何用
一、为什么去参加蓝桥杯?
二、成绩如何?
三、蓝桥杯难度如何?
1.十一届省赛题目:单词分析
解题思路:
很多比赛题目不会直接告诉你该怎么做,都是参杂一些故事,这就需要你有很好的审题能力,提炼有用信息,然后再分步拆解,最后用代码实现!
审题:找出一串小写字符串中 出现频率最高的字母,如果有相同次数的,则按字母排序顺序输出靠前那个! 拆解:首先获取每个字母出现的次数,然后比较谁出现次数最多,如果出现相同次数可以直接比较字母的ascii码。
方案一:
这种解题思路是比较传统的路线,很容易想到的,基本没用什么函数实现,这里猪哥再提供一种用Python函数去解题的方法:
方案二:
这种解题方案思路就是:
先使用string.ascii_lowercase拿到26个小写英文字母 每个字母调用word.count max函数获取count最大的那个字母 如果有相同次数的字母也不必担心,因为string.ascii_lowercase本身就是按字典序排的(就是abcd…)
方案一是遍历所有字母,方案二是遍历26个字母,所以在数据量少的时候可能方案一有优势,数据量大了肯定是方案二更优,而且方案二只有两行代码,逼格满满!
2.十一届国赛决赛题目:蓝跳跳
这是一道十一届蓝桥杯Python大学组国赛的题目,国赛难度相对高,审题尤其重要!
最大跳跃长度为k 每次跳完总长度为L 不能连续两次跳跃长度大于等于p 不同的方案有多少种(步数或某个位置不同即可)
这里猪哥解释下 L6:小于p 即代表:L=6 第一步小于p的方案数,L5总 即表示:L=5 的总方案数,这是猪哥为了方便记忆随手写的!
上面我们找到 第一步小于p 与 第一步大于等于p 的规律,下一步就是转化为代码形式!
上图可看出,我们提取到了两个 for 循环的代码,是分别计算 第一步小于p 和 第一步大于等于p 的代码,下面猪哥把两个加起来就是总方案数,所以这两个for算是核心代码了!
上面我们推导出了核心代码,以及需要存储的数据,接下来我们把全代码写出来!
这里猪哥直接截图,这样方便阅读,如需源码文末可以获取。
基本每行代码都有注释,自己多看几遍应该可以理解!
我们把 k=5, p3, L=10 输入,结果输出 397,与题目中给出的答案一致。
但是我们可以看到题目最后给出了测评规模,如果我们用这套代码去测试L=10^18 内存肯定超过512Mb的要求,原因是我们在代码开始的地方生成了一个L长度的二维数组,如果L越大数组就越长,这里我们考虑是否可以优化一下!
下图最底部猪哥增加了数组长度优化的推导,因为我们在计算当前数据时,只是需要前几个数据,再往前的数据其实是用不上的,所以我们将数组长度缩到最短为 k+1,这样就可以做到循环写入,节省空间!
空间优化后的代码:
将数组长度调整为k+1,增加一个循环的角标,循环写入数据!
关于算法时间的优化猪哥没有仔细研究,但感觉还有优化的空间,如果小伙伴们有更好的优化方案也欢迎讨论交流!
四、蓝桥杯与ACM比较?
ACM是团队协作的成果,而蓝桥杯则直接是个人能力的体现。蓝桥杯更适合不同等级选手:省赛难度相对低,对新手友好;国赛难度大,适合高端玩家展示个人实力,近几年很多ACM选手参加蓝桥杯也证明如此!
虽然有越来越多的大佬参赛,但蓝桥杯从来不是只为大佬服务的精英赛。从蓝桥杯的分组赛制上也能看出来,它更希望通过不同的组别,让每个选手都能在比赛中找到自己的位置,收获自信,了解不足,从而实现以赛促学。
五、参加蓝桥杯有何用?
很多人问猪哥要不要参赛,报名费够吃一顿大餐,去比赛十有八九会打水漂。猪哥觉得,参赛最重要的是过程。常听别人说:过程比结果更重要,参加蓝桥杯就是这样一个典型的例子。
对于全心备战的选手来说,前期刷题、正式比赛、赛后复盘,这是一条不断认清自我,完善自我的求知之路。这条路走得越远圈子越大,见识和眼界也变的越广,在此过程中还能结识一群志趣相投的好友,大学生活也因此变得充实而愉快,在不知不觉中你渐渐变强,也渐渐变成同学口中的大神!
猪哥在自学完Java后参加蓝桥杯虽然只拿了省三,但是真的对自己鼓舞很大,因为那是我第一次得到了认可,得到了同学的夸奖,对自己的编程能力有了一定的信心。
在后来找工作时,我把比赛的经历写进了求职简历中,不但给面试增添了一些自信,入职后还被任命为开发小组长的职务!
猪哥以一个过来人的经验建议大家:如果你现在还在上大学,一定要参加一次蓝桥杯,从现在到3月底刚好是第十二届蓝桥杯大赛的报名阶段。从这一刻开始,让自己变成自己仰慕的那个人!
评论