算法竞赛入坑指南
Abstract
这个是2023年5月14日我在图灵算法协会进行演讲的讲义。
在我学习算法时,学院并没有关于算法的学习组织。作为图灵算法协会第一届的负责人,我想去分享一下我学习算法知识的心路历程,为以后的学弟学妹提供学习的思路,希望能对他们有所帮助。
如果您喜欢我的创作,可以赞助我。您的支持将帮助我继续创作更多优质内容,感谢您的慷慨支持!
算法竞赛入坑指南
图灵算法协会
为什么要组建社团
学校每年会有很多比赛:程序设计大赛、互联网+…(唱歌的、跳舞的…)
about 参加比赛的意义
获奖 or 奖学金 or 锻炼自己?? or 拿奖装逼
算法比赛:既简单又难的比赛
- 简单:全全靠自己
- 难点:全全靠自己
有没有发现很多比赛,都是老师带着参加的?老师为什么带你?
没有参加过比赛的新同学如何参加比赛吗?又凭什么获奖?
比赛每年都有,老师作为引领者,有前车之鉴。盲目参加只会浪费时间与经历。
- 学算法人不多
- 不是必修课(数据结构没敲过什么东西)
- 算法是有难度的
- 需要脑子,需要思考
- 为什么《数据结构》写代码出来这么费劲?
- 算法学习之路非常艰辛坎坷(自学踩了很多很多坑)
社团的意义:学长和学姐为了咱学院能有更多的同学获奖,为大家分享算法学习知识与方法的平台。
补充:关于学习算法的未来?
我们的工作
- 给大家分享经验、创建互相学习的平台
- 未来规划:石家庄学院OJ平台
对大家的期望
- 代码诚信(查到是
真tm丢人) - 希望大家真的学点东西
- 提高学习能力
算法竞赛介绍
比赛是怎么判题的
判题规则:将标准输入和输出重定向到文件,用文件输入并输出到文件中,将输出文件与标准答案进行文本比对。
1 |
|
1 | gcc a.c |
赛制介绍
ACM
- 每道题提交之后都有反馈,可以看到“通过”、“运行错误”、“答案错误”等等结果,但看不到错误的测试样例
- 每道题都有多个测试点,每道题必须通过了所有的测试点才算通过。
- 每道题不限制提交次数,但没通过的话会有罚时,仅以最后一次提交为准。
- 比赛过程中一般可以看到实时排名,通过题数相同的情况下按照答题时间+罚时来排名。
IO
- 每道题提交之后都没有任何反馈,每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。
- 每道题不限制提交次数,如果提交错误没有任何惩罚,仅以最后一次提交为准。(或者叫保存代码。。)
- 比赛过程中看不到实时排名,赛后按照总得分来排名。
“暴力杯”😂
蓝桥杯
蓝桥杯是工信部组织的一项面向在校大学生的程序设计竟赛,分为软件组和电子组。
其中,软件组分为 C/C++组和 Java组、Python组,电子组分为嵌入式组和单片机组。
竞赛分为两个阶段:初赛(省赛) 和决赛。初赛时长4个小时,一共两个方向共计6个组别同时比赛。决赛时长也为4小时,分为上午和下午两个场次(随缘)。
竞赛形式为个人赛,每个人一台电脑,全程使用电脑进行答题,不能访问互联网,也不能使用 USB 等电子设备,只能访问所在考场的局域网。但是可以使用电脑的所有功能:excel、ppt、记事本、计算器。
在比赛期间会通过局域网将试题发放到你的电脑里,你需要完成题目并通过网络提交答案。
所有题目都是客观题,以选手提交答案的评测结果为评分依据。判题过程由机器完成。
题目类型
1、结果填空题
结果填空题是一类具有确定解的问题,要求你填入正确的答案。
无须写出解题过程,不限定计算的过程,你可以通过编程、在纸上计算、甚至用excel 和 Windows 自带的计算器算出答案,只要最终答案正确就能得到满分,否则得0分。
答案确保唯一性,如果你填入的格式和比赛要求的不一样也会被判为0分。
2、编程大题
编程大题具有一定难度梯度、分值不等的编程题目。这些题目的要求明确、答案客观。程序必须使用标准输入、标准输出(cin、cout、scanf、printf),以便于机器评卷时重定向。不要输出没有要求的、多余的内容,例如:“请您输入xx数据:”
要求选手通过编程,对给定的标准输入求解,并通过标准输出,按题目要求的格式输出解。题目一般会给出示例数据。
题目的考察点一般集中于对算法的设计和逻辑的组织上。理论上,选手不可能通过猜测或其它非编程的手段获得问题的解。选手给出的解法应具有普遍性,不能只适用于题目的示例数据(当然,至少应该适用于题目的示例数据)。
为了测试选手给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手选择算法时要尽可能考虑可行性的问题。
ccpc
组织形式:以组(3人/组)为单位进行竞赛(上机测试)。
比赛规则:
(1)竞赛题目为10-12题,比赛时间为5个小时。
(2)参赛队员可以携带诸如书、手册、程序清单等纸质参考资料,但不能携带电子资料,如采用U盘携带程序,线上查询等,经发现取消考试资格。
(3)试题的解答提交裁判称为运行,每一次运行会被判为正确或者错误,判决结果会及时通知参赛队伍。
(4)根据解题数目进行排名,如果多支队伍解题数量相同,则根据解题总用时加上罚时时间进行排名。总用时和罚时时间由每道解答正确的用时加上罚时时间组成。每道试题用时将从竞赛开始到试题解答被判定为正确为止,期间每一次错误的运行将被加罚20分钟的时间,未正确解答题不记时。
(5)竞赛语言包括C++、C和JAVA。
(6)每支队伍使用一台计算机,所有队伍使用计算机的规格和配置完全相同。
那我学什么语言?
C++!
我们老师说:什么语言都能写数据结构。
他没有说的是:哪个写的最顺手?
MC里面徒手也能撸石头😅
为什么不用Java?
java写代码不爽。java没有运算符重载。
1 | // 引入 HashMap 类 |
1 | // 定义一个map对象 |
java在时间上有劣势。一个好的比赛会给java提供双倍或更多的时间,并且还有java标程。
java更容易TLE。比如一道1秒的题,C++标程0.5秒,java标程1.9秒。
那C语言呢?==> 所有C语言能实现的,C++都能实现
C++还带算法库、STL库
算法学习
学什么
补数据结构?数据结构与算法
一定要敲代码!!!
怎么学
“talk is easy,show me the code”
动手敲,AC才是硬道理!
多打真实比赛,与同学们多交流
- 牛客OJ:小白月赛、挑战赛
- Acwing:Acwing周赛
- CodeForces(CF)
- ATCode
写在最后
关于我的课
我讲的课代码 and 讲义(在我博客上有)
讲课会有录播,建议线下能来就来。但是不保证录像不翻车(经典行为:讲完发现没开录制…录完发现麦克风没插…)