ACM模式机考准备指南

发布时间 2023-07-01 22:38:39作者: 燕语醉心

1 熟练掌握格式化输入输出方法

ACM模式需要题目要求,按照规定的格式自己手动写输入和输出的代码,如果没有充分准备,考试的时候就有可能会在输入输出这块卡很久,浪费考试的时间,反之,如果能够掌握各种格式的输入输出方法,则可以让我们在考试的时候快速完成输入输出代码的编写,节省出更多的时间思考和编写逻辑代码。

牛客网有专门练习输入输出的练习题,列举了几种常见的输入输出格式,可以先通过该练习,掌握基本的输入输出模板。

OJ在线编程常见输入输出练习场

还有一些常见的输入输出格式,练习题中没有的,列举如下,可以自己在本地环境练习。

  • 多组时间格式,第一行为组数,第二行开始每行为一组时间,格式为 hour:min:s.ms
2
12:39:1.20
01:23:34.001
  • 不定长整型数组,间隔符为逗号
34,-29,39,21,53,29
  • 同一行分组输入,组数不定,分号间隔,每组元素格式固定,逗号间隔
10001,90;10002,80;10006,100;100003,69;19293,19;
  • 同一行分组输入,组数不定,空格间隔,每组元素格式固定,斜杠间隔
1/N 2/Y 3/N 4/Y

考试的时候还有可能碰到很多不一样格式的输入,不可能一一列举,但万变不离其宗,格式数量固定则使用格式化方式逐行输入,数量不固定则使用循环逐个输入保存,字符串要善用字符串拆分函数等等,在平时练题的时候可以多总结,复杂的输入多练习几遍,记住一些固定的模板,自然就熟练了。

2 掌握数组、字符串常用操作方法

算法考试的题目,大部分的题型多多少少都涉及数组、字符串的操作,因此,熟练掌握数组,字符串的操作方法,可以有效提高做题时的编码能力。

现在很多高级语言都提供了类似数组,但又比数组要强大的数据结构接口,如 C++ 的 vector,Python的 list,掌握这些数据结构的使用方法,那在做题时就能很方便地处理数据,
C++ vector 学习链接:
https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html
Python list 学习链接
https://www.runoob.com/python3/python3-list.html

字符串操作学习链接
C++
https://zhuanlan.zhihu.com/p/553061732?utm_id=0
Python
https://www.runoob.com/python3/python3-string.html

3 掌握考试用编程语言快速排序的方法

如C++的 sort()函数,python的sorted函数等,算法题经常会用到,熟练掌握其数组(列表)排序、字符串排序、复合结构排序的用法。
推荐学习链接
C++
https://www.cnblogs.com/junbaobei/p/10776066.html
Python
https://www.runoob.com/python3/python3-func-sorted.html

4 掌握一些常用算法的框架模板

常用的算法技巧一般有二分查找、双指针、BFS、DFS等,这些都有相对固定的模板,掌握这些模板,当遇到的题目可以用其中某种算法解决时,就可以将算法模板直接默写出来,既可以节省时间,同时也能减少错误。

推荐学习链接:
labuladong 的算法小抄 | labuladong 的算法小抄 (gitee.io)
如果只是应付考试,可以只看里面相关算法技巧相关的章节,同时做下里面推荐的题目,如果想系统地学习算法。建议将labuladong的算法小抄都学习一遍。

二分查找
https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/wo-xie-le--3c789/
滑动窗口
https://labuladong.gitee.io/algo/di-yi-zhan-da78c/shou-ba-sh-48c1d/wo-xie-le--f7a92/
快慢指针
https://labuladong.gitee.io/algo/di-yi-zhan-da78c/shou-ba-sh-48c1d/shuang-zhi-fa4bd/
BFS
https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/bfs-suan-f-463fd/

5 常考题型和相关题目
华为机试题目
https://www.nowcoder.com/exam/oj/ta?page=1&tpId=37&type=37

题型 题号
数组 HJ97,HJ105,HJ3,HJ64
字符串 HJ13,HJ18,HJ39,HJ19,HJ71,HJ29,HJ85
排序 HJ68,HJ6,HJ30,HJ31,HJ34
队列 HJ24,HJ88
链表 HJ90,HJ48,HJ51
HJ50、HJ54、HJ70
二分法 HJ107
BFS HJ43
DFS HJ67

6 模拟考试

当觉得自己练习比较充分,可以先在牛客网上模拟一下考试,方法就是在牛客网的比赛日历里面,找以前的比赛,创建重现赛,就可以模拟考试了,有计时的那种。如果可以在指定时间内做出3道题以上,实际考试的时候问题就不大了,建议多模拟几次,可以让自己先适应考试感觉,在真正考试时就没那么紧张了。创建重现赛的方法如下:

点击以下链接进入比赛日历
https://ac.nowcoder.com/acm/contest/calendar

选择已经进行过的比赛,单击后点击 进入比赛按钮

点击创建重现赛。即可参加参加比赛了

7 考试时的一些注意事项

1、善用打印进行调试,因为考试一般时不允许切屏的,考试时无法使用本地IDE调试,因此调试代码时,最好可以在容易出错的地方加打印,展现其执行过程,能更好的进行问题定位,用好打印调试,多数情况下其实比Debug调试更有效率

2、使用全局变量时一定要初始化,因为用例不止一个,当执行下一个用例时,全局变量没有初始化的话,里面存储的就是上一个用例的过程值,会影响到当前用例的执行结果,当用例不全对时,一定要想想是不是这个原因

3、考试的时候,能用暴力法解决的问题,可以先用暴力法解决,可能会有用例超时,但超时的用例往往是少数的,你可以得到大多数的分,这样可以避免在思考解法上花太多时间,后面时间充裕的话可以再回头想下别的解法。

4、先阅卷,再选择先做哪道题。第一道题不一定就是最简单的,一定要先看完所有的题目,先做你感觉比较简单的题,快速拿下后再去做第二道题。