ACM算法竞赛_快速入门v0.1(施工中)

2hard4me! / 2024-10-22 / 原文

ACM算法竞赛_快速入门

For whosoever hath, to him shall be given, and he shall have more abundance: but whosoever hath not, from him shall be taken away even that he hath.

凡有的,还要加给他,叫他有余。凡没有的,连他所有的,也要夺去

《马太福音》第13章第12节

目录

  • ACM算法竞赛_快速入门
    • 目录
      • ACM的好处❤
      • ACM的坏处😱
      • 基础知识
        • 比赛规则
        • 评分规则
  • 如果你已经看到这里,还没有离开这篇博客 那么你完全可以试试ACM !
    • HOW TO START 🚀
    • STL(Standard Template Library)
    • True Start
    • AtCoder
    • Codeforces

ACM的好处❤

  1. 可以提高编码能力,写大码量工程心理上负担小()
  2. 建模能力++
  3. 锻炼人肉调试能力()
  4. 锻炼智商
  5. 你的数据结构与算法,基础语言课能几乎满分
  6. 让你的大学有事做
  7. 可以公费旅游()
  8. 拿奖了可以加分,面试的时候也可以加分
  9. 你不知道学什么的话,可以试试学ACM

ACM的坏处😱

  1. 可能过拟合竞赛,导致所有代码有浓浓的竞赛风 (千万不要这样!)
  2. 可能会被巨佬吊打
  3. 有可能会挂科
  4. 很可能找不到npy(存疑)
  5. 有可能和一部分校园生活说再见()
  6. 比赛时间经常在期中期末,可能会影响学习
  7. 需要很强的自学能力
  8. 要非常强的抗压能力,
    能接受失败/比赛坐牢/队友跑路/被学弟暴打之类的事情
  9. 未知来源的不可抗力

基础知识

ACM 其实是美国计算机协会赞助的年度竞赛,
旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力。
(摘自baidu)

主要有两个比赛:
ICPC(国际大学生程序设计竞赛)
CCPC(中国大学生程序设计竞赛)

比赛规则

ACM-ICPC以团队的形式代表各学校参赛,每队由至多3名队员组成。每位队员必须是在校学生,有一定的年龄限制,并且每年最多可以参加2站区域选拔赛。

比赛期间,每队使用1台电脑需要在5个小时内使用C/C++、Java和Python中的一种编写程序解决7到13个问题。程序完成之后提交评测机运行,运行的结果会判定为正确或错误两种并及时通知参赛队。

每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球,每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。

最后的获胜者为正确解答题目最多且总用时最少的队伍。每道试题用时将从竞赛开始到试题解答被判定为正确为止,其间每一次提交运行结果被判错误的话将被加罚20分钟时间,未正确解答的试题不记时。

与其它计算机程序竞赛(例如国际信息学奥林匹克,IOI)相比,ACM-ICPC的特点在于其题量大,每队需要在5小时内完成7道或以上的题目。另外,一支队伍只有1台电脑,使得时间显得更为紧张。因此除了扎实的专业水平,良好的团队协作和心理素质同样是获胜的关键()。

评分规则

竞赛进行5个小时,一般有7道或以上试题,由同队的三名选手使用同一台计算机协作完成。当解决了一道试题之后,将其提交给评测机,由评测机判断其是否正确。若提交的程序运行不正确,则该程序将被退回给参赛队,参赛队可以进行修改后再一次提交该问题。程序判定结果有如下7种:

1、Accepted. ——通过!(AC)

2、Wrong Answer.——答案错误。(WA)

3、Runtime Error.——程序运行出错,意外终止等。(RE)

4、Time Limit Exceeded. ——超时(超出时间限制)。程序没在规定时间内出答案。(TLE)

5、Presentation Error. ——格式错误。程序没按规定的格式输出答案。(PE)

6、Memory Limit Exceeded. ——超内存(超出内存限制)。程序没在规定空间内出答案。(MLE)

7、Compile Error. ——编译错误。程序无法编译。(CE)


竞赛结束后,参赛各队 以解出问题的多少进行排名,若解出问题数相同,按照总用时的长短排名

总用时为每个解决了的问题所用时间之和。一个解决了的问题所用的时间是竞赛开始到提交被接受的时间加上该问题的罚时(每次提交通不过,罚时20分钟)。没有解决的问题不记时。

例如:A、B两队都正确完成两道题目,其中A队提交这两题的时间分别是比赛开始后1:00和2:45,B队为1:20和2:00,但B队有一题提交了2次。这样A队的总用时为1:00+2:45=3:45而B队为1:20+2:00+0:20=3:40,所以B队以总用时少而获胜。


如果你已经看到这里,还没有离开这篇博客 那么你完全可以试试ACM !

HOW TO START 🚀

  1. 选择C++当作你的主力语言
    学习C++的基础概念
    老生常谈的一件事:
    选择C++的原因是因为C++是ACM竞赛的主流语言,而且C++的STL库非常强大,可以帮助你快速解决问题。
    我们很少使用面向对象的内容,所有我们实际上学的是C+STL()

    (不过你最好也会python)
    然后开始刷语法题

  2. 熟练c++基础语法,此时你应该可以做到校内c++课程的编程题满分

STL(Standard Template Library)

这是算法竞赛最喜欢的东西(
STL是C++的标准模板库,是C++的一部分,包含了很多常用的
数据结构和算法,比如vector,set,map,queue,priority_queue,stac_k,bitset,string等等。
STL的使用可以大大提高你的编程效率,让你的代码更加简洁,更加易读。
不过STL可能会导致程序用时稍稍增加,
所以在一些对时间要求非常严格的题目中,可能需要自己实现一些数据结构和算法。
但是在大多数情况下,STL是非常足够的喵。

True Start

掌握好了语言,你就掌握了实现算法的工具
然后你就可以在OJ (Online Judge)上开始刷题了!
我们常用的OJ有:

  • Codeforces
  • AtCoder
  • 洛谷
  • nowcoder
  • qoj
  • LeetCode(不过这个是面试用的)
  • AcWing(就平台来说,上面的模板题还不错)

对于大部分的CONTEST
题目难度都递增的
A<B<C<D<E .....这种
但是xcpc并非如此

AtCoder

AtCoder是一个日本的OJ,题目质量很高,题目难度适中,适合新手入门
他的大部分Contest时间是北京时间的周六晚上8点,比较适合亚洲人()
AtCoder的题目难度分:

ABC : AtCoder Beginner Contest 新手赛 (推荐)
ARC : AtCoder Regular Contest 常规赛
AGC : AtCoder Grand Contest 传奇大师赛

ABC 的题目一般都比较直白,没有太多的技巧,适合练习和学习new算法

Codeforces

全球最大的ACM竞赛平台之一,题目质量很高,题目富有人类智慧,适合新手锻炼思维。
分为:
div4 一般为语法题,DEFG有简单算法+思维题
div3 稍难一点的div4()
div2 场次最多的contest
div1