蓝桥杯国奖学长眼中的填空题,真的就是得分利器!
蓝桥杯国奖学长眼中的填空题,真的就是得分利器!
蓝桥杯省赛即将开始,为了帮助同学们更好地备战,本文整理了蓝桥杯国奖学长、学姐的备赛经验,重点分享了蓝桥杯Java B组国一获得者朱浩然的填空题解题技巧。
蓝桥杯国奖学长经验分享
很高兴能为大家分享一些我自己关于蓝桥杯的相关经验,首先简单介绍下我自己:我曾获得过蓝桥杯 Java B组国一,是Oi-Wiki Java进阶部分主要贡献人,此前学习的是文科,后转的理科。
所以,在蓝桥杯备赛过程中,大家无需担心自己水平不够、基础不够。
👉其实,对于蓝桥杯,只要你肯努力,不管什么时候,都不晚。
在介绍蓝桥杯填空题做题经验之前,我先给大家简单介绍下蓝桥杯题目类型的变化以及变化后填空题曾考察过的知识点。
蓝桥杯题目类型变化
在十三届蓝桥杯之前,蓝桥杯的赛制为:4小时进行5道填空题、5道编程题;
在十三届蓝桥杯之后,目前的赛制为:4小时进行2道填空题、8道编程题。因此,现在的赛制会更考验大家的答题速度!
这是因为,从题目类型上来说:
8道编程题,如果不留充分的时间,基本上是写不完的。同时,填空题题量变少,现在的填空题难度高于以前的填空题,有的时候无法像以前一样通过excel表等方式获取填空题答案。再加上,算法题的难度相比以前更加困难。
因此,现在的赛题更考验大家的算法水平。
蓝桥杯如何答题?
比赛时会有一个网站给你提交,分为填空题和编程题两部分。填空题只要填写一段内容,即题目指定输入,你要提供结果;编程题为非指定输入,需要提交你完整的代码。
同时,蓝桥杯采取的是OI赛制,该赛制和中学考试很像,即——以你最后一次修改交卷后的结果为你提交结果!这也就是说,你在赛中无法得到自己做的是正确还是错误的反馈,因此,它非常考验选手心态,而填空题无法自己进行造数据模拟,所以一般很容易失分。
蓝桥杯填空题(更改后)考察知识点
更改题目类型占比之后,蓝桥杯填空题开始考查以下知识点:
01 十三届蓝桥杯填空题考查(不区分组别):
动态规划1次,数学规律 4次,排序1次,简单日期推理1次,手算找规律1次,回文串1次,钟表追及问题1次,康托展开1次
02 十四届蓝桥杯填空题考查(不区分组别):
数学规律1次,日期推理1次,进制转化1次,等差数列求和公式1次,数学转换一次,暴力枚举1次,位运算1次,逆元1次,动态规划1次。
因此,我们可以发现,动态规划,找规律,数论,日期,进制转换等是非常喜欢在填空题出现的题目。
对于数学找规律题,我们要加强训练,因为编程题基本上也会考数学规律,数论也要了解,比如逆元在概率取模,求期望中是经常出现的知识。
日期问题近些年一般只会在填空题出现,只要掌握闰年的变换就是日期问题的核心,我们也完全可以一天天的模拟情况,一年也就365天,100年也就30000多天,日期题一般不会超过1000年,因此,计算机完全有能力能在一秒内跑完。
进制转换是最基本的语法知识,所以,出现了基本上等于送分,位运算一般最喜欢出现异或运算,因为有异或前缀性质,当然,枚举自然也少不了dfs算法,因此,我们还需熟练地掌握递归。
蓝桥杯填空题解题经验
一、找规律法
有时候,填空题给的数据范围非常巨大,我们通过暴力是写不出来的!但一般巨大的数据,出现的结果基本上都会有循环节,也就是说,结果都是重复的,或者只要通过比较小的数据,就可以得到最终答案。
这里用2道十四届蓝桥杯真题,来给大家进行一下讲解:
对于水平高的选手可以直接联想到阶乘尾0的概念,也就是这些相加的数,越到后面末尾的0越多,这就说明了末尾的数字是不会变的,然后 40!恰好有9个0。所以,正常情况下我们枚举到40即可,为了安全起见,你可以枚举多点,可以通过取模控制一下最后9位防止溢出long,同样也可以用python,因为python内置无限大整数,java可以用大整型。
如果你水平不太高,你一定要记住,大数据范围不可能让你暴力求,肯定有规律,你可以直接枚举前100位,来尝试观察规律,中间可以不断对10^{12} 取模,这样就保证了最后12位结果是不变的,不理解此原因可以去学习同模定理。
这题正常情况是用容斥定理结合组合数求解,2023=71717,因此与其不互质的数,只要算出2023 中7的倍数、17的倍数,然后再减去2023内 7*17的倍数即可。
如果赛中你没有想到该方法,可以尝试打表找规律,观察:
2023^1,2023^2,2023^3,看看这些数中互质与不互质的数,有没有什么性质。
在蓝桥杯比赛中,填空题如果你实在没有把握,建议一定要写暴力,这是OI赛,一定要有数据对拍。暴力便是正确结果最好的验证,你可以用小数据验证求解程序是否正确?
二、直接计算法
顾名思义,便是直接用最简单最直接的方式来编写。正常情况下,计算机1秒钟能执行10^8方次指令,所以,比赛4小时,至少有1万多秒。因此,我们程序只要能写到10^12运行指令以内,都是可以在比赛结束前得到结果的。
同时,填空题也分为简单枚举和需要跑久一点的枚举题,以及需要特殊的算法需要计算的题。
这里分别以2道十三届蓝桥杯真题来讲解,一道为动态规划问题,一道为暴力枚举:
2022:请问由10个不同的正整数相加为2022的不同方案数为多少,1+2和2+1视作同一种方案。
经典的背包问题(也可以定义别的dp状态,该方法的复杂度比背包更优)。
如何将该问题转换为背包问题?
1-2022 这些数,即是体积,也是价值,问题就变成了从2022个物品中选,每个物品只能选一次,问选10个物品体积为 2022的方案数
dp状态设计为 dp[i][j][k] 从前i个物品选j个和为k的方案数。
对于第i个数,如果选便是:dp[i-1][j-1][k-i],如果不选便是 dp[i-1][j][k]。状态初始化所有的dp[1-2022][0][0]=1。
任何一个大于 1 的正整数都能被分解为若干个质数相乘,比如 28 = 2×2×7 被分解为了三个质数相乘。请问在区间 [2333333, 23333333] 中有多少个正整数 可以被分解为 12 个质数相乘?
该结论便是唯一分解定理,任意一个数都可以被唯一的表示成若干个质数相乘的形式,数据范围我们可以看做2e7,对每个数暴力去做唯一分解的复杂度是大概是4e3左右,总复杂度8e10左右,计算机要跑800秒,但你在此期间去做别的题还是能做完的。
如果我们提前用线性筛预处理1-根号23333333所有的质数,复杂度4e3左右,然后对2e7的每个数去特判4e3内所有质数,复杂度应该是2e7*ln4e3,大概几秒就能跑完。但填空题只要做出来,无关方法。
蓝桥杯填空题该如何学?
01、学习必要的知识
首先打蓝桥杯,我们前提都是建设在你基础语法学会的情况下,正在学习算法,其次,需要掌握常见写暴力,或者题目常用的方法,比如快速幂、逆元、dfs、概率论、动态规划、模拟能力。
再次是对拍技巧,对拍的含义是,你可以写个暴力程序,复杂度很高,但正确性一定能保证的算法,与你编写复杂度足以通过题目的代码,用相同的数据比对输出结果是否相同?
一般情况下,建议写一题拍一题,如果手速不快不建议,因为对拍同样浪费时间,但如果你最后几题写不出来,又想拿好的奖项,那么你一定要确保前面的题目正确性。
按照以往的经验b组,满分150,填空10,大题140。总分 20分应该能省三,30+运气好能省二,70+基本上能省一,如果难点可能60多甚至50多也可以。因此,可能你离获奖就差那5分,同时,我们大题目也可以拿部分分,努力将自己总分提上去。
不过,因为每个省份的情况不同,以上这些仅给大家做个参考。
02、真题复习
可以去蓝桥云课官网的题库中复习每年的真题,但比赛重点还是你要多刷题,提高自己对题目的见解,掌握常用的算法,一般算法分为思维+算法应用。
思维一般就是可能要动脑,推公式,找规律,算法应用就是你要知道用什么样的算法,能解决最终问题以及是否能在没有模板的情况下写出该代码?
其实,背代码也是比较容易的事情,不过,可以不用完全背,记住原理的情况下,不抄模板写相关题目10道,基本上就记住了;如果忘记了复刷就行,每个知识点通关5-10题,就可以算该知识点初步入门,算法难的部分就在于算法应用。
03、其他经验分享
此外,练习时要注意培养良好的编程习惯,比如:使用恰当的变量名、编写清晰的注释,这有助于在比赛中快速定位问题和调试代码。
同时,要学会利用编程工具的调试功能,提高排查错误的能力。
最后,时间管理也非常重要!!
在比赛前,通过模拟赛或算法双周赛这些免费的比赛来训练自己的速度和应变能力;
比赛中要合理分配时间,对于难题不要过分纠结,确保先拿下把握较大的题目,然后再回头解决难题。保持冷静的心态,有条不紊地分析问题,这是冲省一的关键!
这样当真正的比赛来临时,我们就能以最佳的状态迎接挑战,努力夺得好成绩,加油✊!!