零基础能得奖吗?零基础是指刚开始学C语言或其他编程语言的大一新生,他们编程能力弱,没有学过数据结构和算法。
* 本文 本文作者 罗勇军,来自《蓝桥杯算法入门 C/C++》, 公众号罗勇军算法竞赛。
蓝桥杯是什么?
蓝桥杯全国软件和信息技术专业人才大赛(简称 蓝桥杯)由工业和信息化部人才交流中心举办,是中国 参赛人数最多、影响最大的大学生计算机竞赛,入选中国高等教育学会“全国普通高校大学生竞赛排行榜”榜单赛事和教育部“2022-2025学年面向中小学生的全国性竞赛活动名单”。
2024年4月13日举办了第十五届蓝桥杯个人赛省赛,全国有23万名大学生参加,在C/C++、JAVA、Python、软件测试、Web应用开发、单片机、嵌入式、物联网、EDA等九大竞赛科目中进行了激烈比赛。蓝桥杯大赛的参赛院校1900余所,其中本科院校1102所,本科院校覆盖率88%。大部分大学有数百人参赛,有些大学多达2000多人。
第十六届蓝桥杯将于2025.4月举办,赛项包括:软件赛(C/C++、Java、Python、Web应用、网络安全)、电子赛、项目实战赛等。
蓝桥杯的算法类软件赛(C/C++、Java、Python)是参赛人数最多的项目,它考核: 算法知识点、计算思维、逻辑、编码能力。
蓝桥杯软件赛怎么比赛?
每年4月省赛,集中比赛,一人一机, 比赛时间4小时,不能携带任何资料。省赛一等奖参加6月的全国决赛。
有 三种语言: C/C++、Java、Python。
分 四个组别:研究生组、大学A组、大学B组、大学C组。 每个组别单独评奖。每位选手只能申请参加其中一个组别的竞赛。 研究生只能报研究生组;重点本科院校(985、211)本科生只能报研究生组或大学 A 组;其它本科院校本科生可报大学 B 组及以上组别;高职高专院校可自行选择报任意组别。
在同一年,一个人只能参加一种语言、一个组别。如果你想考几种语言,需要花几年分别参加。
比赛通知 :
https://dasai.lanqiao.cn/notices/1666/
大赛章程:
https://dasai.lanqiao.cn/notices/839/
蓝桥杯软件赛考什么?
比赛大纲:
https://dasai.lanqiao.cn/notices/846/
大纲知识点分三组。各组考点难度向上兼容,A组需同时掌握B组和C组知识点,B组需同时掌握C组知识点。
大学C组:枚举;排序(冒泡排序、选择排序、插入排序);搜索(BFS、DFS);贪心;模拟;二分;DP(普通一维问题);高精度;数据结构(栈、队列、链表);数学(初等数论)。
大学B组:排序(归并排序、快速排序、桶排序、堆排序、基数排序);搜索(剪枝、双向BFS、记忆化搜索、迭代加深搜索、启发式搜索);DP(背包DP、树形DP、状压DP、数位DP、DP的常见优化);字符串(哈希、kmp、manacher);图论(欧拉回路、最小生成树、单源最短路及差分约束系统、拓扑排序、二分图匹配、图的连通性问题(割点、桥、强连通分量)、DFS序、最近共同祖先;数学(排列组合、二项式定理、容斥原理、模意义下的逆元、矩阵运算、高斯消元)。数据结构(ST表、堆、树状数组、线段树、Trie树、并查集、平衡树)、计算几何(基础计算和基本位置关系判定);概率论;博弈论。
研究生及大学A组:字符串(AC自动机、拓展kmp、后缀数组、后缀自动机、回文自动机);图论(网络流、一般图匹配);数学(生成函数、莫比乌斯反演、快速傅里叶变换);数据结构(树链剖分、二维/动态开点线段树、平衡树、可持久化数据结构、树套树、动态树)。
备赛计划
这类参赛者如果在次年4月蓝桥杯省赛前几个月的时间里达成以下目标就能得奖,这些目标正是蓝桥杯考核的内容。
(1) 编码能力: 速度快且准确,几乎不用调试。C/C++语言精通,例如参加C/C++组竞赛,要精通STL的vector、sort、set、map、queue、stack、next_permutation等。
(2) 逻辑思维: 头脑灵活,善于思考,不仅会做学过的例题,还能举一反三、触类旁通。
(3) 算法知识: 学了至少20~30个算法,不能再少了。
(4) 做题数量: 400道题以上。虽然有的人做题少却比做题多的人更厉害,但是普遍情况是做题越多越厉害,没有做题量,前面说的编码能力、逻辑思维、算法知识都是空谈。
初学者刚开始学的时候,每题都要看题解正常吗?这很正常。初学者还没有建立计算思维,写代码也不熟练。这个阶段需要通过多看别人的题解和代码来快速入门。在做了100道题差不多入门后,后面应该少看题解,尽量靠自己做。自己独立做一道题,比看题解做5道题的收获更大。
蓝桥杯省赛的参赛人数众多,是普及性的算法竞赛,这常会让参赛者误解,以为难度不高。其实蓝桥杯是一种高难度的专业竞赛,不是那种随便玩玩的业余竞赛。零基础的学生要参赛得奖,可以对比大一的高数课,高数被誉为大学中的最难课程、挂科之王。大一参加蓝桥杯,训练时间至少需要学习高数的两倍,才有可能获得省赛三等奖。
对绝大多数同学来说,做不到第一次参赛就得省赛一等奖并进入国赛,一般至少要参加两次才能得省赛一等奖,这意味着需要一年半以上的努力。
大学的算法竞赛除了蓝桥杯,还有ICPC、CCPC。蓝桥杯省赛是普及赛,参加人数多得奖人数多; 蓝桥杯国赛、ICPC、CCPC是精英赛,参加人数少得奖人数少。如果同学想走到蓝桥杯国赛和ICPC、CCPC,下面是一些建议。
很多大学生在中学阶段就已经参加过NOI信息学竞赛,或者学习过编程,那么他们已经有了基础,进入大学后投入更多时间专心地进行编程训练,有这么好的起点当然是很有优势的。
如果是零基础的同学,也不用担心自己落后,因为相比已经有了基础的同学只是晚学了几个月而已,只要多花一些时间很快就能赶上。对于算法竞赛这样需要两三年的长周期学习来说,坚持才是最重要的。
由于算法竞赛的艰难和长期性,不管同学有没有基础,都应该从大一上学期开始学习。
(1) 大一上学期,熟悉C/C++、Java、Python语言之一,最好从C/C++开始。一些专业在大一上学期开设编程语言课。有些专业是在大一下学期,这些学生需要自学编程语言。大一上学期,做一些简单的中文题并开始准备蓝桥杯。任务是进一步熟悉编程语言、学习如何在OJ上做题、掌握输入/输出的用法、积累代码量。基本上每个题目在网上都能搜到题解和代码。初学者可以多看别人的代码,尽快提高自己的编码能力。另外,最好几个人一起编程,并互相改错。看懂别人的代码,找出别人代码中的错误,也是很好的训练,重要性不亚于独立做题。
(2) 大一上学期~下学期,做一些入门题,例如搜索、数学、贪心、简单动态规划等。第一次参加蓝桥杯。
(3) 大一暑假,参加集训,学习数据结构、深入掌握STL、进行各种专题入门,熟悉一起训练的队友。
(4) 大二上学期,深入各类专题学习,并制订一年的计划,牢固掌握各种算法知识点。如果有可能,在大二上学期参加ICPC、CCPC区域赛。
(5) 大二下学期,第二次参加蓝桥杯,最好能得省赛一等奖并进入国赛,这样才能顺利地走完算法竞赛。
(6) 大二暑假,组队参加网络赛和模拟赛。
(7) 大三上学期,参加ICPC、CCPC并获奖。
(8) 大三和大四,开始难题、综合题的学习,使自己获得彻底的飞跃,成为“编码大师”,得到蓝桥杯国赛一等奖和ICPC、CCPC的金牌、银牌。通常,能获得金牌的队伍至少能做出一道难题。难题有3个特征: 综合性强、思维复杂、代码冗长。这些难题是绝大部分学编程的学生难以翻越的大山,能征服大山的竞赛队员可以称为“杰出”了。
最后介绍做题的题库。本书的例题和习题来自以下3个题库。
(1) 蓝桥杯题库(本书简称lanqiaoOJ): https://www.lanqiao.cn/problems/
(2) 洛谷: https://www.luogu.com.cn/
(3) 华东理工大学题库: http://oj.ecustacm.cn/
有热切想进步的读者问: “有没有快速进步的技巧或方法?”下面是作者的回答。
(1) 刷题,也就是大量做编程题。这是最重要的一条,得奖与否,全靠刷题。算法竞赛是理论和实践的结合,只看书学理论,做题不够,就是纸上谈兵,一上战场就会露馅。只有通过大量做题,才能像一位高明的剑客一样,身剑合一。在平时的学习中,看书、看资料学知识点约占5%的时间,做题和思考占95%的时间。
(2) 熟练使用键盘,打字越快越好。手指有机械记忆,要做到绝对的盲打,脑海中想到什么代码,手指立刻能打出来。请学习正确的指法,然后通过一段时间的盲打获得机械记忆,并且击键越快越好。对于程序员来说,还要特别练习数字和标点符号,因为代码中有大量的“0、1、2、3、4、5、6、7、8、9、~、!、@、#、%、^、&、*、(、)、-、=、{、}、[、]、|、\、;、,、.、<、>、?、/”,一定要做到能盲打这些符号,形成机械记忆。
指甲的长短也会影响击键的感觉,要勤剪指甲,以保证击键的速度。
另外还有汉字输入。中国人经常输入汉字,绝大部分人使用全拼。作者强烈建议学习和使用双拼。使用全拼打汉字,打字速度比思维慢,边想边打,打字慢影响了思维;而使用双拼,打字比思维快,脑海中刚想完一句话,键盘输入就同步结束了,思维得到了解放。
(3) 精通编程语言。在做题时注意积累编程经验,争取每天收获10多个编程小经验。半年后能做到一次写对长度超过20行的代码,没有语法和逻辑错误。
(4) 做题时勤做算法分析。一道题可能有多种解题方案,这些方案各有优劣,通过算法分析,选择合适的方案。
(5) 和队友一起学习。找到志同道合、积极努力的队友,一起看知识点、一起做题,互相检查代码、构造测试,使进步速度增加一倍。
参赛规则
蓝桥杯软件赛的参赛对象引用 “第十五届蓝桥杯全国软件和信息技术专业人才大赛章程”,https://dasai.lanqiao.cn/notices/839/: 具有正式全日制学籍并且符合相关科目报名要求的研究生、本科及高职高专学生(以报名时的状态为准),以个人为单位进行比赛。
1. 组别
竞赛组别按编程语言、院校进行分组。
(1) 按编程语言分组。竞赛组别按编程语言分为C/C++程序设计、Java软件开发、Python程序设计3组。
(2) 按院校分组。竞赛组别按院校分为研究生组、大学A组、大学B组、大学C组。研究生只能报研究生组。985、211院校本科生只能报大学A组及以上组别,其他院校本科生可自行选择报大学B组及以上组别,高职高专院校学生可报大学C组或其他任意组别。
每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。
2. 赛程
报名时间在每年的 10月~12月。比赛在每年的春季,有省赛和决赛,省赛的一等奖选手获得全国总决赛资格。省赛在4月,分赛区比赛; 决赛在6月,集中比赛。每次比赛的时长为4小时,所有组别同时进行。
省赛的每个组别设置一、二、三等奖,原则上各奖项的比例为10%、20%、30%。获奖比例仅作为参考,组委会专家组将根据赛题的难易程度及整体的答题情况制定各奖项的获奖最低分数线,未达到获奖最低分数线者不得奖。
3. 竞赛形式
个人赛,省赛、决赛均采用封闭、限时方式进行。选手的计算机通过局域网连接到各个考场的比赛服务器。选手在答题过程中不允许访问互联网,也不允许使用本机以外的资源(如USB连接)。比赛系统以“服务器浏览器”方式发放试题、回收选手答案。选手将答案提交到比赛系统中,超过比赛时间将无法提交。
4. 参赛选手的计算机环境“第十五届蓝桥杯大赛(个人赛)竞赛大纲”,https://dasai.lanqiao.cn/notices/846/
以2024年的第十五届省赛为例。
X86兼容计算机,内存不小于4GB,硬盘不小于60GB。操作系统: Windows 7、Windows 8、Windows 10或Windows 11。
C/C++语言开发环境蓝桥杯官方提供的编程环境: https://dasai.lanqiao.cn/notices/1096/。在赛场上也使用这个环境,请参赛者下载,在日常编码时使用。: Devcpp 5.11(支持 C++11标准),C/C++API 帮助文档。
5. 试题形式
竞赛题目完全为客观题型,具体题型及题目数量以正式比赛时的赛题为准,以选手所提交答案的测评结果为评分依据。
(1) 结果填空题。题目描述一个具有确定解的问题,要求选手对问题的解填空,不要求写解题过程,不限制解题方法(可以使用任何开发语言或工具,甚至是手算),只要求填写最终的结果。最终的解是一个整数或者是一个字符串,最终的解可以使用ASCII字符表达。
(2) 程序设计题。题目包含明确的问题描述、输入和输出格式,以及用于解释问题的样例数据。编程题所涉及的问题一定有明确客观的标准来判断结果是否正确,并可以通过程序对结果进行评判。选手应当根据问题描述编写程序来解决问题,在评测时选手的程序应当从标准输入设备读入数据,并将最终的结果输出到标准输出设备中。在问题描述中会明确说明给定的条件和限制,明确问题的任务,选手的程序应当能解决在给定条件和限制下的所有可能情况。选手的程序应当具有普遍性,不能只适用于题目的样例数据。为了测试选手所给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手在选择算法时要尽可能考虑可行性和效率问题。
6. 试题考查范围
试题考查选手解决实际问题的能力,对于结果填空题,选手可以使用手算、软件、编程等方法解决,对于编程题,选手只能使用编程解决。
竞赛侧重考查选手对于算法和数据结构的灵活运用能力,很多试题需要使用计算机算法才能有效地解决。
考查范围如下,在所包含的内容中标*的部分只限于C/C++研究生组、C/C++大学A组。
C/C++程序设计基础:考查使用C/C++编写程序的能力。该部分不考查选手对某一语法的理解程度,选手可以使用自己喜欢的语句编写程序。另外,选手可以在C语言程序中使用标准C的库函数,在C++语言程序中使用标准C++的库函数(包括C库、STL等)。
计算机算法: 枚举、排序、搜索、计数、贪心、动态规划、图论、数论、博弈论*、概率论*、计算几何*、字符串算法等。
数据结构: 数组、对象/结构、字符串、队列、栈、树、图、堆、平衡树/线段树、复杂数据结构*、嵌套数据结构*等。
7. 答案提交
选手只有在比赛时间内提交的答案内容才是可以用来评测的,比赛之后的任何提交均无效。选手应该使用考试指定的网页来提交代码,任何其他方式的提交(如邮件、U盘)都不作为评测的依据。
选手可以在比赛中的任何时间查看自己之前提交的代码,也可以重新提交任何题目的答案,对于每个试题,仅有最后的一次提交被保存并作为评测的依据。在比赛中,评测结果不会显示给选手,选手应该在没有反馈的情况下自行设计数据调试自己的程序。
对于每个试题,选手应将试题的答案内容复制、粘贴到网页上进行提交。
在程序中应该只包含计算模块,不包含任何其他的模块,例如图形、系统接口调用、系统中断等。对于系统接口的调用都应该通过标准库来进行。
在程序中引用的库应该在程序中以源代码的方式写出,在提交时也应该和程序的其他部分一起提交。
8. 评分
全部使用计算机自动评分。
对于结果填空题,题目保证只有唯一解,选手的结果只有和解完全相同才得分,出现格式错误或有多余内容时不得分。
对于编程题,评测系统将使用多个评测数据来测试程序。每个评测数据有对应的分数。选手所提交的程序将分别用每个评测数据作为输入来运行。对于某个评测数据,如果选手的程序的输出与正确答案相匹配,则选手获得该评测数据的分数。
评测使用的评测数据一般与试题中给定的样例输入/输出不一样,因此建议选手在提交程序前使用不同的数据测试自己的程序。
提交的程序应该严格按照输出格式的要求来输出,包括输出空格和换行的要求。如果程序没有遵循输出格式的要求,将被判定为答案错误。注意,程序在输出的时候多输出了内容也属于没有遵循输出格式要求的一种,所以在输出的时候不要输出任何多余的内容,例如调试输出。
C/C++选手请务必选择正确的编译器,如果编译器选择错误,可能导致编译不通过而得0分。另外,请务必让主函数的返回值为0,当返回非0时评测系统会认为程序执行错误而得0分。
C/C++选手的所有依赖的函数必须明确地在源文件中#include,不能通过工程设置而省略常用头文件。
蓝桥杯软件赛的知识点
■ 表1.1蓝桥杯软件赛的知识点
该表中画线的知识点是蓝桥杯省赛的必考或常考知识点,包括全部初级知识点和部分中级知识点,是参赛者入门必学的知识点。本书将重点介绍这些内容。
下面以2023年第十四届省赛题目历年真题: https://www.lanqiao.cn/courses/2786/learning/为例,介绍比赛涉及的知识点和难度,如表1.2~表1.5所示。难度最低是1,最高是5。
■ 表1.2 2023年第十四届蓝桥杯省赛C/C++大学A组
大学A组的难度总计35.5。
■表1.3 2023年第十四届蓝桥杯省赛C/C++大学B组
大学B组的难度总计30.5。
■ 表1.4 2023年第十四届蓝桥杯省赛C/C++大学C组
大学C组的难度总计31。
■表1.5 2023年第十四届蓝桥杯省赛C/C++研究生组
研究生组的难度总计33.5。
从第十四届蓝桥杯省赛题目可以看到,省赛涉及的知识点相当广泛,覆盖了初级、中级、高级知识点。从难度上看,难度值为1~3是初级,3~4是中级,4~5是高级。
对于初学者来说,在经过至少半年的学习后,如果能做出难度值为1~3的题目,已经难能可贵,是同伴中的佼佼者了。
另外,初学者也能做中、高级的题目。根据蓝桥杯的赛制,一道题可以得部分分数,而大多数中、高级题目可以用简单方法、简单知识点得10%~30%的分数。下面这些知识点几乎是必考的,因为它们是整个算法竞赛知识库的基础。
(1) 杂题。杂题是不需要算法和数据结构,只需要逻辑、推理的题目,难度可难、可易。杂题考查参赛者的思维能力和编码能力,只能通过大量做题来提高。
(2) BFS搜索和DFS搜索,也就是暴力搜索。这是非常基本的算法,是基础中的基础。
(3) 动态规划。线性DP,以及一些DP应用,例如状压DP、树形DP等。
(4) 简单数学。简单数论、几何题、简单概率论。
(5) 简单的字符串处理、输入/输出。
(6) 基本算法。例如排序、排列、二分、前缀和、贪心。
(7) 基本数据结构。例如队列、栈、链表、二叉树等。
零基础的初学者要在几个月内学会这些知识点,难度很大。本书可以帮助初学者从零基础开始学习,快速进步。
题型介绍
1. 结果填空题
结果填空题共两题,每题5分,不要求写解题过程,不限制解题方法(可以使用任何开发语言或工具,甚至是手算),只要求填写最终的结果。
填空题的分值占比很低,2023年前只占总分150分的10/150,2024年占总分100分的10/100。2023年第十四届省赛,绝大部分填空题都需要编程才能求解,仅靠手算是不够的。2024年第十五届省赛,填空题比上一年简单了一点。
填空题一般比较简单,有时也很难。
(1) 简单的填空题。
答案是1478。因为过于简单,这里不做解析。
(2) 很难的填空题。
这是一道博弈论的题目,用DFS编程实现,即使是高手,也需要20分钟左右。因为数据较小,也可以手算分析,不过难度仍然较大。
2. 程序设计题
在2023年之前,程序设计题共8题,分值分别为10、10、15、15、20、20、25、25,总分为140。
2024年,程序设计题共6题,分值分别为10、10、15、15、20、20,总分为90。
下面先看一道简单题,考核思维。
这是一道思维题。
什么时候无解?如果第一颗或最后一颗棋子不同,无解。因为第一颗和最后一颗棋子不能翻转。
每颗能翻动的棋子只能翻一次,因为翻过之后,它和相邻棋子一样不能再翻了。要使S和T最终一样,那么每颗不同的棋子都要翻一次。所以一种简单且正确的方法是从左到右枚举,从S的第2颗棋子开始,与T比较,如果不同,就尝试翻动。如果能翻成一样,就继续翻,如果不能翻成一样,就无解。
再看一道难题。
题目的描述很简单,但是如何求解让人摸不着头脑。这道题100%的正解是杜教筛,属于高级知识点,在任何算法竞赛中都是难题。即使选手能做,蓝桥杯只给4小时的比赛时间,做到这一题时估计也没有时间了。这一题的30%的解法见第2章的讲解。
备赛秘籍
看了考点,感觉头皮发麻。要学这么多?
这哪里是给大一新生学的,明明是给整个大学四年学的,而且 一大半知识点根本就不会出现在计算机专业整个大学四年的课程里!
是的,这就是竞赛。竞赛是课程之外的高难度学习,就业竞争力的保证!
不过,先不要着急,其实不用学这么多。
看下面的“秘籍”,大一得奖还是有可能的。
1、备赛时间
我们有多少时间准备明年4月的比赛?去掉期末考试那个月,春节再玩几天, 只剩下100天!
得奖需要做400题, 平均每天4题。做4题需要多少时间?简单题可能1~2小时。难题就不好说了。
把学习时间做个对比:蓝桥杯算法入门 ≈ 两个高等数学。高等数学是大学的挂科之王,蓝桥杯等于两个挂科之王。
注意,这只是“算法 入门”,以后还有“ 进阶”呢。
花两个高等数学的学习时间,有可能得省三等、二等。
时间太紧张了,都没时间玩了!
你肯花时间,你就得奖。
他不肯花时间,他就不得奖。
蓝桥杯考核“硬实力”,它是靠大量训练时间堆起来的、高难度的计算机专业竞赛。
2、蓝桥杯的难度
有的同学说我在危言耸听,因为看到网上有人说:“蓝桥杯简单!我啥算法也没学,用暴力法拿奖!”
“暴力法”是什么?就是不用什么知识点,就用中学生都懂的方法做。为什么可以得分?因为每个题目有10个测试,有些简单,有些难,暴力法往往能通过几个比较简单的测试,得到约30%的分数。
但是,这些帖子是什么时候发的?
以前的蓝桥杯可能比较简单,但是22年以后已经不简单了。
21年之前,蓝桥杯有10题,5个填空+5个编程。
22-23年,蓝桥杯有10题,2个填空+8个编程。
24年,蓝桥杯有8题,2个填空+6个编程。
题目的难度上升很快。
3、大学C组备赛
大学C组的知识点不多,都是 必考、常考,没什么好说的,大量做相关的编程题即可。
4、大学B组备赛
大学B组的知识点突然多了很多,大一新生肯定学不完,能学30%就不错了!
不过我小声告诉你,学 30%就足够省二等奖了。这30%就是下面的彩色字:
---------------------------
排序(归并排序、快速排序、桶排序、堆排序、基数排序);搜索( 剪枝、双向BFS、 记忆化搜索、迭代加深搜索、启发式搜索);DP( 背包DP、 树形DP、状压DP、数位DP、DP的常见优化);字符串( 哈希、kmp、manacher);图论( 欧拉回路、 最小生成树、 单源最短路及差分约束系统、拓扑排序、二分图匹配、图的连通性问题(割点、桥、强连通分量)、 DFS序、最近共同祖先;数学( 排列组合、 二项式定理、容斥原理、模意义下的逆元、矩阵运算、高斯消元)。数据结构(ST表、堆、树状数组、线段树、Trie树、并查集、平衡树)、计算几何(基础计算和基本位置关系判定);概率论;博弈论。
---------------------------
这下子有信心了!
那些彩色知识点以外的题怎么办?改用自己会的简单知识点做,得30%左右分数就可以了。
这些知识点等大二再学吧。
5、A组备赛
参加A组比赛,是不是需要把B组所有知识点都学完,再学A组知识点?
这次大声告诉你: 不需要!
A组备赛和B组备赛 一样,A组的初学者学那B组的30%知识点,也足够二等奖!
大纲中的A组知识点怎么办?直接放弃!赛场上如果出了这种题,也几乎没有人做,高手也不行。
原因1:4小时太短了,即使大牛会做,也没时间了。
原因2:这些知识点本身很难,加上蓝桥杯不让带资料,那些知识点的模板代码靠脑袋记不住。
6、编程速度快快快
编程的速度在蓝桥杯中非常关键。因为比赛时间只有4小时,所以一切都要快!
读题要快:有的蓝桥杯题目废话多,容易把人绕晕,可以先看它的输入输入,再倒回去读题。
思维要快:快速搞清楚题目的要求,并用输入输出样例确定功能。
建模要快:把题目要求和有关的算法对照,确定用哪个算法。
编码要快:击键要快,减少调试。这建立在精通语言的基础上,例如他参加C/C++组,要精通STL的vector、sort、set、map、queue、stack、next_permutation等。
要做到快速编程,只有一个办法:大量 刷题。
做题的时候有意识地提高兴奋度,尽快完成。
蓝桥杯软件赛的题型
有两种题型:结果填空题、程序设计题。都是客观题,由机器判题,绝对公平。
填空题共2题,每题5分,共10分。根据题目描述直接填写结果,求解方式不限,不一定要编码。
程序设计共6题,分值10、10、15、15、20、20,共90分。需要写代码,提交代码后,判题系统运行代码,进行测试。
开练
蓝桥杯题库:
https://www.lanqiao.cn/problems/
今天第1讲,用20道题热热身,部分是往年蓝桥杯比赛的真题。
如果不会,就看看 别人提交的题解。
1、填空题。大部分不用编程,纸上手算即可。
迷宫
https://www.lanqiao.cn/problems/641/learning/
其中的“ 641”是这道题在蓝桥题库的编号,后面的题都用编号表示。
握手问题 19695
拼正方形 19696
求和 3493
阶乘求和 3500
排列字母 2118
裁纸刀 2060
九进制转十进制 2095
星期计算 2140
空间 1445
2、程序设计题。如果不会,可以看蓝桥杯给的题解,或者放着以后再做。 前2题我给了参考代码。
好数 19709
合适的组合 3268
阿坤老师的烹饪评分系统 3991
公式题 3306
绝地求生 3758
单身贵族游戏 3841
依依的蜜茶店 3988
幸运数字 4707
好数 19709 的 C/C++代码:
Python代码
n = int(input) cnt = 0 while n > 0:if check(n): cnt += 1n -= 1print(cnt)
Java代码
合适的组合 3268 的 C/C++代码:
Python代码
Java代码
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int a, b, c, d, x, y, z;a = scanner.nextInt;x = scanner.nextInt;b = scanner.nextInt;y = scanner.nextInt;c = scanner.nextInt;z = scanner.nextInt;d = scanner.nextInt; // x, yfor (int i = 1; i <= a; i++) for (int j = 1; j <= b; j++) if (i * x + y * j == d) {System.out.println("YES");return;} // x, zfor (int i = 1; i <= a; i++) for (int j = 1; j <= c; j++) if (i * x + z * j == d) {System.out.println("YES");return;} // y, zfor (int i = 1; i <= b; i++) for (int j = 1; j <= c; j++) if (i * y + z * j == d) {System.out.println("YES");return;}
System.out.println("NO");}}
最后说几句
本文说了一些不方便写在教材《蓝桥杯算法入门》中的话。
详细内容请看 《蓝桥杯算法入门》的“第1章 蓝桥杯大赛软件类概述”: 蓝桥杯规则、题型、知识点、往年真题、判题、备赛计划。
适合算法竞赛小白入手的书
这是一套 “算法入门”书,写给“正在学或刚学过编程语言,但是数据结构、算法零基础”的初学者。
本书的读者符合这样的画像:刚学过编程语言,C/C++、Java、Python这几种语言中的任何一个都可以;有基本的编码能力,语法比较熟悉;编过一些代码,但仍然不熟练;不懂数据结构和算法,遇到较难的问题没有思路。
这位勤奋的读者有以下目标:
(1) 数据结构和算法入门,建立计算思维。
(2) 大量编码,提高编码能力。
(3) 参加蓝桥杯大赛并获奖。
如果读者准备参加蓝桥杯全国软件和信息技术专业人才大赛(软件类),看这本书正合适,因为题目大多是蓝桥杯大赛的真题,并且按照蓝桥杯大赛的要求进行了详细的解析。
本书也适用于准备其他算法竞赛,例如全国青少年信息学奥林匹克竞赛(NOI)、国际大学生程序设计竞赛(ICPC)、中国大学生程序设计竞赛(CCPC)、中国高校计算机大赛团体程序设计天梯赛等,因为所有的算法竞赛的考点都是相通的。
用一句话概括本书的作用: 通过本书的学习,读者可以从一名蓝桥杯、算法竞赛的小白,成长为掌握算法知识、建立算法思维、具备编码能力的专业的计算机编程人才。
蓝桥杯大纲知识点对照
蓝桥杯大赛软件赛是蓝桥杯大赛中参赛人数最多的项目,包括Java软件开发、C/C++程序设计、Python程序设计三个子项。蓝桥杯大赛软件赛是算法竞赛,考核数据结构和算法,包括数据结构、基本算法、搜索、动态规划、数学、图论、字符串等。掌握这些知识点是计算机专业人才的核心能力。
蓝桥杯大赛官方在2023年发布《蓝桥杯大赛软件赛知识点大纲》,按难度分为三部分:大学C组、大学B组、研究生及大学A组。本书内容精选了其中初级(≥大学C组)和部分中级(≥大学B组)知识,都是必考或常考知识点。还有一些中级和高级知识点,因为难度较高,不适合在入门阶段学习,本书没有涉及。下表是蓝桥杯大纲与本书内容的对照。
由于蓝桥杯软件赛有三种语言,所以作者编写了三个版本:《蓝桥杯算法入门(C/C++)》、《蓝桥杯算法入门(Java)》和《蓝桥杯算法入门(Python)》,形成一个系列。这三个版本对数据结构和算法的理论讲解相同,选用的例题大部分一样。不同的内容也很多,例如C/C++的STL、Java的类、Python的字符和日期库,例题用各自的语言给出模板代码。
目前出版的算法竞赛书籍中,代码绝大部分都是用C/C++语言写的,极少有其他语言的版本。因此,本系列中的Java和Python版本填补了这一空白。
本书是C/C++版。C/C++组是参赛人数最多的组,占总人数的三分之二。C/C++有丰富的STL,本书在多个章节中详解了它的应用。例如“3.2 STL概述”详解了常用的功能,如String库、迭代器、容器、vector、常用函数、set、map,“3.3 链表、3.4队列、3.5优先队列、3.6栈”介绍了STL的数据结构,“4.2 排序函数”介绍了STL的sort函数,“4.3 排列和组合”介绍了STL的next_permutation。熟练掌握STL是竞赛队员必备的技能,能极大减小编码难度,缩短编码时间。
备赛经验
由于蓝桥杯的影响力,很多大学生在大一就会参加蓝桥杯软件赛,但是第一次参赛的新手往往铩羽而归。因为蓝桥杯大赛是极为专业、全面考核计算机能力的计算机竞赛,它对编码能力、算法知识、计算思维、计算机建模的要求极高。
刚接触蓝桥杯大赛的学生往往有这样的困惑:蓝桥杯大赛似乎很难、很花时间,不仅难以入门,而且学习成本很高,至少需要高强度学习半年以上才有可能得奖,然后再用一年甚至两年的勤奋学习,才能取得好成绩。每个读者都希望有一个性价比很高的学习方法: 学习时间尽量少,得奖尽量大!那么,阅读这本书是得奖的捷径吗?答案是薛定谔之猫:是,也不是。
回答“是”。这本书指引了一条合适的、正确的蓝桥杯备赛之路,让读者少走弯路。本书包括了蓝桥杯省赛二等奖所需的知识点,讲解了大量的大赛真题,并列出了巩固知识点所需要的练习题。本书的章节是按照学习难度循序渐进地展开的,读者只需要按从前到后的顺序阅读即可。只要用心看书并大量做题,得奖有相当的保证。
回答“不是”。“ 捷径”往往是“艰难”的代名词,“捷径”往往更费力,正如爬山的捷径更陡峭、更费力一样。读者是否能走通这个捷径,取决于你花费的精力有多少。简单地说,算法竞赛没有轻松的学习方法,一切都是“硬”实力,没有花哨的投机取巧。
还有一点让低年级参赛者感到压力巨大:竞赛涉及的知识点是“超纲”的,往往在大三、大四的专业课程中才会涉及,甚至很多知识点根本就不会在计算机专业的课程中出现,这些知识点中有一些是很基本的考点;而且蓝桥杯软件赛不是那种短期培训就能迅速获得成绩的竞赛,如果等到大三或大四才参赛,已经来不及了。如何解决“超纲”问题?这就是本书的意义: 算法竞赛需要拓展大量课外的专业知识,很多拓展内容在本书中进行了详细介绍。当然,本书定位是“入门”,只拓展了部分知识,更全面的算法知识点解析请阅读作者的另一本书 《算法竞赛》,这是一本算法大全,覆盖了95%的算法竞赛知识点。
在准备蓝桥杯大赛时,请注意以下几个重要问题。
(1) 刷题。
备赛需要大量做题,这是最重要的一条。只读理论、只看书,而不做题,学习效果只会略大于零,对知识点的理解无法转化为能编码解决问题的“硬实力”。刷多少题合适?本书介绍了算法竞赛中的常见初级和中级知识点,每个知识点做10~20题,总共做600题左右,这是蓝桥杯算法入门需要的最少做题量。
(2) 速度。
参加蓝桥杯大赛,编码速度极为重要。比赛时间只有4小时,非常紧张。编码速度决定了获奖的级别。如何提高编码速度?有以下技巧。
熟练掌握集成编译环境。把编译环境变成得心应手的工具。
快速读题。每道题需要建模后才能编码。快速读完题目并想出合适的算法,这需要经过大量的做题训练。训练的时候提高大脑的兴奋度,用最快的速度理解题目并建立计算机编码模型。
减少调试。写好程序后,争取能一次通过测试样例。为了减少调试,尽量使用不容易出错的方法,例如少用指针、多用静态数组、把逻辑功能模块化等,不要使用动态调试方法,不要使用单步跟踪、断点等调试工具。如果需要查看中间的运行结果,就在代码中的关键地方打印出调试信息。
使用库函数。如果题目涉及比较复杂的数据处理,用库函数可以大大减少编码量,而且能减少错误的发生。平时注意积累C/C++、Java、Python语言的库函数,并做到熟练应用。
(3)模板。
模板是某些数据结构、算法的标准代码。模板代码是计算机科学发展过程中凝练出的精华。
模板很有用,例如并查集模板、快速幂模板、埃氏筛模板等,需要牢记并熟练应用。学习经典算法时,需要整理代码模板并多次学习和使用它。
有的算法竞赛可以带纸质资料进场,相当于开卷考试,例如ICPC、CCPC,很多竞赛队员带了厚厚的打印代码和各种书籍进场参赛。但是蓝桥杯大赛禁止带任何资料进场,是闭卷考试,完全靠脑力,需要记住模板。这增加了一些难度。
有初学者问:我想速成,来不及做很多题,不过我可以多准备一些模板,把模板背会,是不是也能获奖? 回答是:模板有用且需要掌握,但赛场上模板的用处有限。不同的编程题目,即使用到相同的算法或数据结构,也往往不能用同样的代码,而需要做很多修改,因为不同环境下的变量和数据规模是不同的。对模板的学习和使用,需要多花一些时间,融会贯通,不能急躁。注意,模板的代码需要自己真正理解、熟练掌握并多次使用过,才能在做题的时候快速应用到编码中。
最后用一段话寄语读者。教育的目的是什么?英国教育家怀特海说:“学生是有血有肉的人,教育的目的是激发和引导他们的自我发展之路。”算法竞赛就是促进学生自我发展的一条康庄大道。大学的创新学习有三条途径,缺一不可: 一是以竞促学;二是以研促学;三是以创促学。参加算法竞赛,好处体现在很多方面:保研、奖学金、考研、就业、出国、创新学分。本书将帮助你掌握算法竞赛必备知识,建立计算思维,提高编程能力,在算法竞赛中披荆斩棘,立于不败之地。
本套书是面向蓝桥杯全国软件和信息技术专业人才大赛的软件类赛项(以下简称蓝桥杯软件类大赛)的入门图书,从数据结构和算法的维度帮助广大读者训练编程思维和计算思维,掌握编程方法和解题技巧。
本书共10章,第1章主要介绍了蓝桥杯软件类大赛的基本情况,归类汇总了其涉及的知识点(包括算法知识点),详细介绍了其在线评测系统以说明评分情况。第2~10章则由浅入深、由易到难地介绍了各类知识点,包括手算题和杂题、基础数据结构、基本算法、搜索、高级数据结构、动态规划、数学、字符串、图论等,对于每一类知识点都简明扼要地进行说明,并以真题作为例题进行细致讲解,以更好地帮助读者实现学用结合的学习效果。需要特别说明的是,本套书例题的代码部分,分别由C++、Python、Java三种语言来实现。
本书不仅适合作为蓝桥杯软件类大赛参赛者的备赛用书,还适用于备赛其他编程或算法类大赛(如全国青少年信息学奥林匹克竞赛NOI、国际大学生程序设计竞赛ICPC、中国大学生程序设计竞赛CCPC、中国高校计算机大赛?团体程序设计天梯赛GPLT等)。
扫码京东优惠购书
本书是一本全面、深入解析与算法竞赛有关的数据结构、算法、代码的计算机教材。本书包括十个专题:基础数据结构、基本算法、搜索、高级数据结构、动态规划、数论和线性代数、组合数学、计算几何、字符串和图论。本书覆盖了绝大多数算法竞赛考点。本书解析了算法竞赛考核的数据结构、算法;组织了每个知识点的理论解析和经典例题;给出了简洁、精要的模板代码;通过明快清晰的文字、透彻的图解,实现了较好的易读性。本书的读者对象是参加算法竞赛的中学生和大学生、准备面试IT企业算法题的求职者、需要提高算法能力的开发人员,以及对计算机算法有兴趣的广大科技工作者。
扫码京东优惠购书
本书旨在帮助读者更好地应对算法面试,提高算法和编程能力。书中按专题精选了LeetCode平台的一系列的热点算法题,并详细解释其求解思路和过程。全书分为三个部分,第Ⅰ部分为数据结构及其应用,以常用数据结构为主题,深入讲解各种数据结构的应用方法和技巧。第Ⅱ部分为算法策略及其应用,以基本算法设计方法和算法设计策略为主题,深入讲解各种算法设计策略的应用方法和技巧。第Ⅲ部分为经典问题及其求解,以实际中的一些问题为主题,深入讲解这些问题多种求解方法。
本书适合于需要进行算法面试的读者,通过阅读本书可以掌握算法面试中求解问题的方法和技巧,提升自己的算法技能和思维方式,从而在面试中脱颖而出。
扫码京东优惠购书返回搜狐,查看更多