我是靠谱客的博主 土豪网络,最近开发中收集的这篇文章主要介绍【转】ACM竞赛中要注意的,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

做题之前:

1. 看完题目注意交流,但切记不要被误导。一旦开始做题,必须找一个队友帮你再读一遍题(不是给他讲一遍题!!!),确认题目理解无误,并且确认所有的题目重要条件都已经看到,队友设计出一些可能的陷阱数据,和考虑各种边界条件。对算法进行交流,不要写完才发现有特殊情况算法根本无法处理。不要把简单题目复杂化也不要把复杂题目简单化。

2. 尽量杜绝讲题,特别是看英文题的时候,讲题容易漏条件细节,也有可能根本看错了。如果题目里面有句话没看懂,一定得弄懂,搞不好那句话就是关键。
还有要抓住中心词,比如把最大值最小化,还是把最小值最大化,这个也是经常出现。

3. input,output每句话都要读懂,遇见不认识的关键单词,特别是形容词副词一定要查字典,例如按字母序排列等,因为这些都有可能从根本上影响到算法。注意有多个修饰词的时候找准中心词。特别小心个别英文单词的意义对题意的关键影响。

4. 超出int范围考虑double或unsigned int再或者int64或long long(由编译器决定),再或者要自己用数组模拟整数。

5. 每一个题都要考虑完善了才上去写。就算电脑空着也不要急着敲代码,思路不清敲上去的代码都是垃圾,不仅浪费了机时还要花时间去调试。敲代码时不要慌张,速度快不是体现在打字上。因为敲代码太慌思路不清而导致出错不值得。


提交的细节问题:
1. 注意是否是多组样例,出现的英文是否正确拼写,神仙数是否写对。所有的scanf和printf语句都要检查占位符是否正确使用,特别是lf。小数的答案注意保留几位小数,是四舍五入还是取上整或者下整。

2. 去掉调试代码,数组改小调试后要改回来,用来调试并输出的代码注释掉而不是删掉,但注意不要把输出答案的语句也注释了。

3. 仔细检查输出,不要PE,特别注意如果要求输出之间有空格/空行就不要贪方便直接在每组后面加空格空行,有时候有多条分支用于输出,不要一条分支改好了,另一条没有改。

4. PC^2需要特别注意文件名里面不要有中文和空格,最后要return 0,扩展名要和编译器一致(切记)——如果交c,扩展名就是.c,交C++,扩展名就是.cpp。

5. 检查题号、语言(注意C与C++语法上的区别)、选择的文件一定是源文件。提交时一定要请队友帮忙检查一次输入输出格式、拼写、大小写、题号、语言、文件。

6. 提交后马上打印。等待打印时考虑如果是WA可能是什么地方出错。打印的代码要标好版本,不要看错不同时间的版本。

最后一点要养成习惯,比赛可以打印,交题的同时马上打印,一旦错了,一边找错误去,不要占电脑。

常见错误:
1. 修改程序之前要保留备份,避免改到后来发现之前的是对的,只是小错,却已经被删除或者修改,不好还原。

2. 如果WA了,不要只改一处错误就马上急着交,很可能还有其他错误。但也不要过于小心,不提交又不做其他有意义事情。

3. 输入结束条件不要看错。有时sample里给的是-1,实际可能是以负数结束。两个数的情况有时只要有一个为0就结束。

4. 牢记自己定义的全局变量。如果全局定义了n,main里也定义了n就会出现诡异的错误。当使用模板时特别小心冲突。

5. qsort的cmp函数不要写错,记得返回值是-1、0和1。使用模版要小心参数是否传错,不要想当然的理解意思。

6. 计数问题的输入和结果都在int范围内,有可能中间结果会超int。考虑清楚题目是否需要大数,还是直接用int64就可以,或者用double可以,或者边乘边除避免使用大数。编译器用int64还是long long要弄清楚。输入输出要用%I64d和%lld。

7. 注意==与=。数组行列下标不要弄反。两层嵌套循环循环变量不要用错,逻辑运算符不要想错用错,特别是循环终止条件。块复制代码要小心,检查所有部分是否已经正确修改。数据类型不要写错(int写成char)。想清楚是>=还是只要>。终止条件尽量不要用==而是用<=之类的范围判断。输入的&不要掉。数组下标[]打错位置。注意下标从0开始还是1开始。

8. 检查数组是否开得足够大,最好比要求的开大一点,同时注意队列、栈等不明显的大小是否开够。用hash要小心冲突。

9. 多组数据要注意各项初始化的位置,一定每次都要重新初始化。DP不要把初始条件写错。Max与min的初值要想清楚。

10. Scanf与cin不要混用,同时记住scanf效率高很多。Scanf与gets混用时也要特别小心,尽量避免。

11. 如果输入的是字符矩阵,使用%s将一行字符一起读入。避免用%c单个字符读入。Sscanf/sprintf很好用。

12. 几何题尽量避免求斜率,用向量叉乘代替。PI定义用acos(-1.0)

13. 小心整数整除问题,整数运算得浮点数用x/1.0的形式,或者使用强制类型转换更加安全。

14. 对double型操作要小心判断大小、判断相等、绝对值等情况

15. 超时想清楚究竟是算法太慢,还是程序或者特殊数据没有写好导致了死循环,必要时可以浪费一次罚时看看是否还没有开始做核心部分就已经超时了,但要谨慎。

比赛策略:
1. 题目保证全看完,不要觉得看起来题目难就不看,同时要小心因为看题看到一半转去做水题导致原本要看的题目没看完。

2. 比赛前阶段注意跟风,之后跟风要谨慎。有些简单题目被包装得看起来很难,要敢做。有的题目可能有技巧的枚举就可以了,或者有个很简单的规律,可以水一下,但是如果决定要水,水的代码一定不能写错。

3. 如果数据规模比较大,应该用文件保存好数据,不要每次重新输入,记得直接复制粘贴,或者文件输入输出重定向。

4. 确定好做题的顺序,要按照题目的难易程度以及代码复杂程度做题。第一道简单题交给队中最稳的人做,万一遇到麻烦也不要慌,如果有很多队都出了就更不必着急了,它必定是简单题,必定是可以很快做出来的,晚几分钟也比罚掉20分好。请注意,简单题是指编码简单的题目,算法简单,但是涉及到浮点数处理、字符串处理,或者代码很长的题目,不一定适合第一个做。

5. 不要被一道题卡死。要舍得丢掉,比赛不是比个人能力。如果觉得这个题很可能出但又实在找不到错,可以先做攻其他题,最后一小时或没其他题做的时候在回来看。如果简单题实在被卡住无法查错,可以考虑换人写。但重写代码代价很大,要慎重。写好后用队友提供的陷阱数据进行测试,尤其是特例。

6. 了解队友擅长的题型。如果自己不是很有把握看看交给队友会不会更稳当一些。

7. 如果不超时,尽量用简单的方式处理。不要过分追求代码完美搞得代码很复杂。

8. 除非很多人过或实在没题写,否则几何题最后考虑。精度问题很多,很难把所有情况考虑到。如果涉及到小数的题目,观望一段时间再决定是否要写。

9. 随时注意裁判的message,有疑问记得发clarification

10. 程序出错如果一时无法排除就应该打印出来阅读而把机器让出来。尽量不要用机器调试。如果机器空闲,可以先敲测试数据,以及程序框架,以及输入部分。

11. 如果IDE出现问题,关掉重新打开或许就好了,不要在一个工程里加多个文件,不要踢到电源。

12. 最后一小时不要开两道题以上。要有人舍得放下自己的题目帮队友查错,最好是选择希望最大的题目,可以参考同校其余队伍的情况。不到最后一刻不能松懈。

最后

以上就是土豪网络为你收集整理的【转】ACM竞赛中要注意的的全部内容,希望文章能够帮你解决【转】ACM竞赛中要注意的所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部