Re: 从零开始的程序设计竞赛顾名思义,是一个力图介绍完全没有接触过程序设计竞赛的学校、老师及学生进入比赛的文章。文章包含如何参加比赛以及训练如何安排等内容。前面的五篇内容(零到四)发在我的个人知乎号上,从第六篇开始将会在「拼题A」公众号上首发,过段时间再发到知乎上。过往内容你可以在知乎上看到(搜索「从零开始的程序设计竞赛」)。
从这一篇开始是组队训练篇。组队训练相比个人训练来说,技巧更多、花样更多、流派也更多,因此很难覆盖全部情况,提出的解法也未必是适合所有队伍的。因此我只会提到一些比较共通的部分——回到队伍里还是要根据实际情况再做调整。
本文特别感谢以下审稿人,以及他们提出的修改建议:
- @黄文瀚 (a.k.a 主爷爷;套题及补题相关的十分有用的建议)
- @nothing100 (选队友时注意水平)
- @chenjb(各种意见的补充)
开门见山:学会选队友
像是天梯赛这种不是很要求团队配合(只要求团队策略)的比赛还好些,*CPC 类比赛是要求很强的团队协作力的——而且你很有可能需要跟队友度过很长很长很长……的训练时间。所以与其选 很强 的队友,不如选 目标一致 的队友:有共同的目标才好走的更远。选目标不一致的队友,有可能就会出现这种情况。
换言之,如果你是一条咸鱼,你也应该去选咸鱼一点的队友;反之,如果你很想努力,当然也需要努力一些的队友——当然肯定人人都觉得自己很努力,可惜实际情况并不是这样的。这之间的磨合和适应是非常重要的。打比赛是很功利很功利的行为,不要考虑什么兄弟情,那都是假的——比赛里面只有「商业关系」,理论上最好的状态就是比赛时一起努力,比赛后各过各的。
水平也是挺重要的一环:倒也不是说你不能抱大腿,但换位思考一下:如果你是大腿的话,带着腿毛队友的比赛体验到底如何?相信你心里也有数了。与其指望别人带,还是找水平相近的队友比较快乐,还能互相提高。不过很多学校未必能做到这点,更可能出现的情况是一强带两弱,那就只能想办法不要拖后腿、发挥自己的作用,如果能提供一些额外的支持那当然更好了:例如帮读题之类的……
当然,队友之间还需要性格可以互相……接受,特别冲和特别佛系的放一起还好,万一两个冲的放一起那可完了。还有队友一定一定一定要人品——不是人品爆发那个人品,而是人品本来的含义。要学做题,先学做人,不会做人的人即使再会做题,组队之后是 100% 会出问题的。性格恶劣、人品不行的人不仅组队要远离,正常平时也应该远离,即便他可能是大腿。这点希望所有参赛选手都能明白。
做合适的套题
我不太清楚目前国内队伍都是如何选题的,但放在国内的环境里来说,做什么套题都未必是对的——在很久很久以前,出题学校还是固定的几所,出题人还是固定的一些熟人;现在的出题人根本无法预测,赛前也不会公布,即使公布了也未必意味着有多少出题质量——就算谷歌出题也未必可靠……当年被天天喷的北大的题放在现在已经是良心题了。
可见「合适的套题」这个东西可能本来就不存在。不过总得挑点合适的题做吧?这边是一些粗浅的建议:
- 刚开始的时候先做点简单的套题。简单的套题有很多,区域赛不好找可以找找省赛的,省赛的不合适可以翻翻国外的,总而言之组队训练的大准则必然是先从低质量套题开始,用低质量的套题进行简单的磨合,等上了正轨再开始使用较好或者更真实的套题来训练。
- 感谢主爷爷的提醒:对套题(其实是对于题目)不能有歧视(关于这个的一些额外讨论可以参考这一篇文章)。很多同学看不上很多差题、老题、重题,看到 「这题好像在哪出过」就不做了或者随便扒拉两下,而对于一些「新题」或者「大牛推荐的题」则花大量时间解决——但实际上这些被看不上的题目未必被弄清楚了。到了区域赛上,不少人一边喊着「这题不是 XXX 出过吗」,一边还是通不过,再后悔就晚了。对于大部分达不到金牌水平的选手而言,所有套题都是有可做点的,即便套题名声再不堪。主爷爷的原话摘抄如下:「作为一名选手,不要对某些套题有过强的 bias,尤其是还远远达不到出题人水准的选手。」
- 无论如何,当年前几年的区域赛的题目还是要做的——毕竟好歹也代表一个趋势,虽然倒霉遇上一个哪也没听过的出题人也没啥用,但好歹能感受一下现场的难度、氛围。相对的,如果确实有兴趣参加比赛,要注意「给自己留好题」:比赛直播的时候慎防剧透,也不要提前尝试做这些题目,当然就更不要在群里讨论了。
- 我个人认为多校类的训练赛可以用作训练,但不宜当成标杆。事实上是找的多校出题人大部分跟区域赛出题半毛钱关系都没有——几位老大哥可能还出一出,但其他学校或出题人根本就不出区域赛……即使是出题人,区域赛花费的心思跟训练赛肯定也是不一样的。多校打的好不好跟比赛就没啥关系,不要太在意好坏,关键还是看学到了什么或者练到了什么。
- 普通学校不宜训练太难的题目:包含开火车、总决赛题目等,虽然我感觉应该不大会有人这么干……一套题如果吭哧训 5 个小时还是做个一两题,就没什么意义了。适当作为自虐是可以的,但过多就不必了。
补题!补题!补题!
一句话概括:训练不补题,不如不训练。补题不训练,还是好队伍。
补题的重要性是远大于训练的——毕竟你在电脑前面干坐五个小时啥也没写也叫训练了一场比赛,但补题可就未必了。
补题不仅要做不会做的题,还要做队友做而你不会的题、或者犯下致命失误的题。不要抱着「队友过了那我不管了」以及「反正最后还是过了就不管了」的心态去补题。
不过,有些比赛有些大自然题目不好补,或者是真的真的找不到解题报告——我接到过不少人问我有没有 XX 比赛的解题报告。是真没有啊(悲伤)。这种情况就没什么办法了;你可以尝试请教一下你认识的大牛,或者一些讨论社区(以前 ICPCCamp 部分承担这个功能,现在由于很多原因也木了),不行的话放弃也不是一个坏选择:毕竟区域赛上不可能要求会做所有题目才能拿金牌。
补题容易遇到的问题跟个人训练也差不多:遇到难题 -> 补不动 -> 不想补新题 -> 根本没有补题(by 主爷爷)。对于如何选择补题的难度,主爷爷和我的意见有一些分歧,这边建议大家根据自己情况合理选择:
- 主爷爷认为:要首先对于自己有一个心理预期,然后对于这个预期高一档的的必做题以下难度的题目,优先补掉,不会做就看代码看题解,哪怕抄一遍,只要自己会做会默写也行。对于过难的题目,可以考虑往后放一些,但绝对不是建议直接放弃不补,这里只是进步速度和时间成本的一个平衡。
- 我认为:只要是自己能力范围内的必须都补掉;稍微超出一点的也应该补掉,但不应该抄一遍(我觉得对于大部分选手来说,抄一遍能学会东西的概率太小了);过难的题目我建议直接放弃,因为做不出来对大部分选手来说就是做不出来……即使后面变强了回来补,那也不能说没放弃对吧,而且更大的可能是变强后有更多的题要补,之前的题就被无视了(
可以看到的是,我和主爷爷都同意:能力范围内的必须都补掉;稍微超出的、可以学到新东西的也是要补掉的(如何补有一些差别);过难的题建议根据个人情况选择。友情提醒:主爷爷的竞赛成绩比我高不止一个档次(
关于补题,还有一种方法是定一个目标(假如你能找到的话):找一个觉得自己努力能够到的目标队伍,然后看他们过了什么题,你们就去补什么题。但需要注意的是这只能作为参考,而不能一直盯死——毕竟你也不知道他们的训练是不是科学……
补题跟个人训练做题一样,需要做好反思、总结,需要真正把题目化为己有(不过可能这个也挺难的)。反正总要做一做的。