作者smartboy (小光光)
看板ACMCLUB
标题Re: FYI, icpc 比赛经验
时间Sun Nov 13 02:18:40 2005
: 发信人: liulike (积累rp&&->100), 信区: ACM_ICPC
: 标 题: 比赛经验(zz)
: 发信站: 四川大学蓝色星空站 (Tue Sep 6 13:23:04 2005), 站内
: 标 题: 比赛经验
: 发信站: 天大求实BBS (Sun Sep 4 21:08:12 2005), 本站(bbs.tju.edu.cn)
以下就我个人的经验给一些补充, 或是不一样的看法.
: 在天大,偶参加的比赛可以算是最多的了,说说比赛经验。
: 可能现在说早了点,需要大家在正式比赛之前再看一遍。
: 推荐此篇文章打印,与模板放在一起。
比赛可以携带纸本的参考资料, 除了大家常会准备的 code/algorithm
其实还可以准备一些实用的东西, 譬如
a. 各类数学公式
b. 做一份 check list, 譬如你若觉得他讲得这篇文章有道理, 便可以印一份比赛
时 check what to do/not to do.
我知道以前有些队会做 "十大死亡原因" 列一些平时写程式或模拟赛做过的蠢
事, 提醒自己不要再犯.
: 1. 比赛中评测会有些慢,偶尔还会碰到隔10分钟以上才返回结果的情况,这段
: 时间不能等结果,必须开工其他题,如果WA,两道题同时做。交完每道题都
: 要先打印。
在真实比赛中, submit 到收到结果这中间的空档超过十分钟是常有的事. 而 print
code 到拿到结果要等多久更是难讲. 因此无论有没有把握, submit 後马上 print
一份. 这样要是 wrong answer, 便能直接在纸上作业而不需等待列印.
(听说某年台北赛区的作法, 我不知道是不是常态. 为求慎重, 除了电脑自动 verify,
还要印出一份 output 肉眼 double check. 导致 judge 速度缓慢.
(这方法的另一个缺点是 test data 无法太大, 至少, output 不能太多))
: 2. 比赛时发的饭不是让你当时就吃的,那是给你赛後吃的。基本上比赛中前几
: 名的队都没人吃,除非领先很多。
我是觉得因人而异, 很饿就先吃吧. 不过比赛时间宝贵, 随便吃点不会饿到不舒服
就好. 我知道有些同学说自备巧克力吃的效果不错. 我自己则是忙起来就忘了吃,
也不会觉得饿.
: 3. 很多选手,尤其是第一次参加比赛的,到一个新环境,全当旅游了,参观的
: 参观,找同学的找同学,玩玩乐乐就把正事抛到脑後了,结果比赛自然没什
: 麽好成绩,这样的例子太多了。所以到参赛地後要时刻不忘自己是来比赛的
: ,好好休息、备战。
: 4. 参赛前一天要睡10个小时以上,非常有助于保持比赛中的精力,很多时候比
: 赛到3个多小时队员就没劲了就是这个原因。前一天晚饭与当天早饭要吃好
: ,理由同上,要知道下顿饭得下午3点赛後才能吃。
: 5. 到新环境,时刻注意远离疾病,感冒肠炎病不大,却是成绩的天敌。
: 6. 英语不好,看不懂的,要勤查词典,懒一次就少一道题,远离奖牌。
虽然说题目中的叙述每个字都不能轻忽, 不过我还是倾向用一般读英文的方式,
看不懂先猜, 判断一下这个字是不是关键, 有时某些字只是故事背景, 不懂没关系 :P
好好善用队友, 有不认识的字或查字典前, 先问队友, 会比较省时间.
: 7. 可以紧张,杜绝慌张,慌张是出题的敌人,任何时候,如果发现自己或者队
: 友出现慌张的情况,提醒深呼吸。
: 8. 照着纸敲代码和sample数据时不要敲错,特别注意文字信息。
这很重要, 看过太多次这样死掉的例子...
: 9. 第一道简单题交给队中最稳的人做,万一遇到麻烦也不要慌,如果有很多队
: 都出了就更不必着急了,它必定是简单题,必定是可以很快做出来的,晚几
: 分钟也比罚掉20分好。另外注意不要PE。
平时练习就应该养成习惯, 严格遵守题目的 output format, 就算 judge 宣称他们
允许 format 的错误, 也不要去踩. 理由是, 谁能保证 judge 是不是完整考虑到你
的奇怪 format. 有些赛区对 format 问题是用程式看, 有的是人工判断. 前者可能
rule 没写好, 後者可能 judge 看走眼.
反正完全照着题目的说法做, 最不会出问题.
: 10. 最後一小时是出题高峰,谁松懈,谁落後。最後一小时出一道是正常,出两
: 道更好。
时间剩下一小时到半小时, 就得衡量整队的实力与当时的解题状况等等因素,
决定放弃某些题目, 留下最有希望的几题全力写或除错.
即使是最後几分钟也不应该有人闲着. 就是决定只冲刺一题, 没上机的两人还有很
多事可以忙, 譬如重读题目, 想反例, 设计 test case, 或是多几个脑袋帮忙看萤
幕上有没有打错什麽东西. 除非完全没希望, 否则不应该有任何人 idle.
: 以上各条均有出处,每条都包含着以往教训,每条都可能浪费掉你一年的努力,
: 不可小视。
: 以下各条有些来自于其他学校,有些是总结:
: 11. 无论是否有人通过,所有题必须全读过,最好每道题都有两人以上读过,尽
: 量杜绝讲题现象。要完全弄清题意,正确的判断出题目的难易,不要想当然。
这很重要.
全部的题目都要读过, 一开始对於 input/output 细节可以不那麽注意, 至少要能
看出难度/可不可行.
可以跟队友讲解题意, 但是写 code 的人一定要自己重头到尾读一次. 若第一个读
题的人不是写 code 的, 应该提示第二个人何处是重点或非重点. 读题时顺手把重
要的字句做上记号, 方便写 code 时注意. 读 input/output 或图片, 也可以顺便
作记号, 譬如第几个数字是什麽变数, 或哪几个是一组, 或标上座标/序号...
: 12. 虽然讨论有助于出题,但是以往每赛区第一名基本都是各自为战,但是互相
: 了解,觉得一道题适合其他人做就转手。
我想, 所谓 "各自为战" 并非不管队友死活, 而是因为第一名的队伍的队员实力都
还不错. 重点应该是彼此了解, 了解各员的实力, 了解各员的解题状况.
在解题时, 除了专心处理手上的题目之外, 记得分出一点点精神, 注意一下自己是
不是卡在一处一段时间或是遇到什麽麻烦正在用笨方法处理问题, 若是的话请队友
帮忙一下. 同样的, 隔一段时间就问一下队友他在干什麽, 是不是有需要协助之处.
我比赛多年, 成绩还不差, 除了队友很优秀之外, 我觉得随时了解彼此的动态也是
很重要的因素. 跳出手上的题目, 注意一下 over all 的状况, 注意一下三个人在
做些什麽, 注意还有多少题目没读过, 看一下是不是有简单的题目放着没人管, 或
是太多题目等着写, 也偶尔(不要太常, 否则浪废时间且容易心慌)注意其他队伍的
出题速度与顺序.
: 13. 保持头脑灵活,在正常方法不行时想想歪门邪道,比如换种不常见的特殊的
: 数据结构,加预处理,限时搜索等。效率是第一位的,如果觉得DP麻烦就用
: 记忆化搜索,总之考虑清楚後就要在最短时间出题。
他说的方法不一定都适用, 不过重点应该是头尾几句
"保持头脑灵活", "总之考虑清楚後就要在最短时间出题"
在几种方式都可行的情况下, 选好写不易错的方法.
: 14. 竞赛中更需要比平时稳定,程序出来後要检查重点地方,尽量1Y。对于WA
: 的题,不要改一处就交,很可能还有错的地方,要稳,要懂得在压力下也要
: 仔细。对 WA的题测试时要完整,必须每个点都测到,但不一定特别复杂。要
: 考虑到测试的各种边界情况,比如矩阵可能为1*1或1*n或m*1。
: 15. 除非做出的人很多,否则最後考虑复杂几何题,精度造成的问题太多了。对
: double型操作要小心判断大小、绝对值等情况。一般情况下不要用float型。
: 16. 块复制要小心,检查相应的部分是否已经正确修改。
"块复制" 应该是指 code copy/paste
除非避免 copy/paste 的代价高很多, 否则尽量少这麽做.
当然, 这代价得自己衡量.
: 17. 纸上写程序要尽量完整,每道题上机时间(包括输入、测试和调试)不要超
: 过一小时。程序出错如果一时无法排除就应该打印出来阅读而把机器让出来。
: 18. 提交时注意题号,不要交错题。由于PC^2的界面,这种情况时有发生。
: 19. 尽可能想到题目可以用到的数学的东西。
: 20. 初始化必不可少。
: 21. 数组行列下标不要弄反,位运算或字符串哪头是0和n不要搞反。
: 22. 提交时记得把所有的调试信息都关掉。
: 23. 实在迫不得已才可换人做题。
若还没开始写, 或刚开始写但觉得不顺, 此时可以当机立断马上换人.
若是写完但一直错, 则不鼓励轻易换人重写.
换人做有一定的 cost, 这 cost 跟难度成正比, 因为相当於另外写一题.
因此原则上只有偏简单的题目却找不到错误原因才换人
: 24. 有想法後,写程序之前想好时空效率。比赛中一般不会出现时限30秒以上的
: 题(国外赛区除外),10秒及以上的一般不会超过3道。
大多数的题目都是会写或不会写的差别, 或是 complexity 明显可行不可行的差别.
需要斤斤计较的题目少见. IOI 对演算法的执行效率要求才比较高.
: 25. 竞赛机会每年只有一次,训练了很长时间,如果比赛中出现疏失,那麽今後
: 一年都会後悔。对于不准备明年参赛的同学,更是要珍惜最後一次参赛机会。
: 附以前所写《组队赛说明》
: 1 要有做题比较多的队员,对于各种题型都有所涉及,做题稳,一般对前两道简单
: 题能够保证快速,并且99%以上一次AC。
能这样是最好, 不过...我稍熟的同学好像几乎没人可以到 99% 那麽稳 XD
: 2 要有人专门应付数学与几何题,但复杂的几何题要放在最後做,对一些常用的函
: 数要有模版准备。如精度控制,叉积,凸包等。
除非背得非常熟, 否则照着纸本 keyin 总是比用想的来得快与正确.
: 3 要有人能够对付麻烦的题,并保证一定的通过率,大多数的比赛都至少有一道这
: 样的题,如 POJ 1913,TOJ 1092。
: 4 要有人对DP非常之熟,单次、双次、相对等情况都不在话下。对经典DP手到擒来。
: 5 要有人对稀奇古怪的算法都做过程序,涉猎广,对于数论、图论中的一些特殊结
: 论都知道。如 TOJ 1584,ZOJ 1015,UVA 10733。
(这些题号我不清楚内容是什麽, 最近也没时间看.)
: 6 要有人对复杂的通用算法做过程序,如网络流中的最小费用最大流等等一系列的
: 流,求割点/割边,启发式搜索/搏弈等。
若不论某些题目比较难的区赛赛区(譬如大陆和欧洲某些区), 我的经验是这些比较进
阶的演算法并不常出现, 特别是 world final, 题目有越来越简单的趋势.
(题数上限放宽, 又不断强调让每队都能解出几题, 各题都有队伍解出来, 这使得题
目难度受到限制, 改为题海战术, 简单或中等题目变多, 也不易出现超难题.)
就算有进阶演算法的题目, 影响力也比以前小, 因为若实力不足, 写到那题之前比赛
就结束了. 不然就是可以改写其他题, 还有很多题目可以写 :P
当然, 多一分准备就多一分胜算, 能弄懂并准备些进阶的演算法是最好. 若要争第一
这也有可能是关键.
: 7 模版要自己写,并且另两个人都认真读过,用以往题目进行多次的测试。模版要
: 全,但要控制篇幅,因为很多赛区已开始限制页数。
我感觉台大同学最近几年对纸本参考资料的准备没前些年那麽用心.
虽然用到的机会并不高, 平均大概半题到一题吧. 但比赛中能赚到一题, 帮助就不小.
: 8 要有人对 Linux/vi/gcc 系统熟悉,对PC^2熟悉,一定注意正式比赛时不要出现
: 提交错题的情况。另外也要试用Dev-C++等Windows下的免费软件。总之熟悉比赛
: 环境。
有些同学不习惯 unix-like 的写程式环境, 要特别注意.
: 9 每次练习赛都要当作正式比赛来做,要确保所有的题都看过,赛後要把没做出来
: 的题尽量补上。
: 10 可能的话多看看以往比赛的总结、照片和录象,缩短与正式竞赛的距离,避免正
: 式竞赛时紧张得做不出题等情况。
模拟赛除了拿从前的考古题做之外, 别忘了比对一下当时的 score board,
某些赛区甚至提供各队的解题顺序与时间, 在赛後检讨时也可以参考看看.
检讨是不是照着题目难度由易到难做题, 对题目难度的估计是否正确.
: 最好的情况就是对于各种题目三个队员都能做,但是又各有侧重。
: 要保证出来一道题能够有人会做、敢做,至少也要知道做法。
常看到建议每个人各有擅长的题目, 但通常的状况是三个人都差不多没有特别擅长
的项目. 这其实不难, 就一开始三个人各挑几个领域, 然後从此练习时遇到该类型
的题目就丢给他做, 练习久了, 三个人各自对於某些类型的演算法便会特别熟.
--
"声音是声音, icon 是 icon, 用 icon 来表示声音的结果,
就是不知道哪个是声音, 哪个是 icon. "
小光光
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.142.187