Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124519
  • 博文数量: 27
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 311
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-28 09:05
文章分类

全部博文(27)

文章存档

2011年(1)

2010年(4)

2009年(4)

2008年(18)

我的朋友

分类: C/C++

2009-03-16 20:23:27

今天作为助理非常荣幸的参加了计算机工程学院的第二届ACM程序设计竞赛,非常欣慰的看到了学弟学妹们编程的基本功都非常扎实,有一些非常优秀,比赛中严格遵守规则认真解题坚持到底的精神令人敬佩。
    在比赛中也出现了各种各样奇奇怪怪的错误,尽管施老师、汪老师、顾老师等对出错的队伍进行了耐心、细致的指导,仍让有队伍在犯着同样的错误,为了能减少各种错误的发生以及为以后的队伍提供可以参考的例子,我决定将施老师等老师总结的错误、队伍提交代码的错误以及我自己平时编程时常犯的错误总结一下,真诚的邀请大家一起共同提供一些错误例子及编程经验供大家借鉴,热烈欢迎踊跃发帖。
我先总结几个,挂一漏万,抛砖引玉了。
1. 没有按照要求输出。本次比赛为了更加准确的评题要求使用文件输入,使用标准输出,不少队伍在提交的代码仍然使用文件输出,导致judge看不到输出,只好判Wrong Answer.
2. 输出格式不对。比如该换行的没有换行,给空格的没有空格。
3. 交错题。有不少队伍犯过这个错误,拿B题的代码去交A题。
4. 文件名写错。有几个队伍是把输入文件的名字写错了,当judge给返回Wrong Answer时不知道为什么错。
5. 变量的初始化问题。由于变量没有进行初始化,程序在进行第一组数据运算时是正确的,以后的全被那个变量给搞错了,所以ACMer经常用函数memset()进行初始化(这个函数可以单独开一个帖子呢)。

6.数组越界。比如程序段"int a[100]",然后就把所有数据都读到这个数组里再进行运算,队员在自己机子上测试时不会出错,但是当服务器上的测试数据超过100个时就会出问题了。最好的方法就是读一次数据运算一次并输出一次。这样的程序在judge上是有可能跑飞的。

7.多打了一个换行符。通常题目都有多组输入,要求多组输出,通常队员会这样子写程序"printf("%d\n",ans)";这样程序运行完之后会比标准答案多一行空行,如果是自动评题进行严格匹配的话,多一个空行也会返回Wrong Answer,如果按照这个标准的话,今天提交的代码很少会有通过的。

8.没有考虑到特殊数据。比如0、1、-1之类的,还有就是比较大的数,处理不好会导致超时。

9. freopen()参数写错。比如把freopen("input.txt","r",stdin)误写为freopen("input.txt","w",stdin)。

10. scanf()参数写错。例如"int a[10]; scanf("%d", a[0]);"应该写成"int a[10]; scanf("%d", &a[0]);"

11. 文件名中含有空格。把文件"problem a.cpp"提交之后在Judge端运行的命令可能是这样的"g++ -c problem a.cpp -o problem a.exe",显然本来是一个参数的变成了两个参数,导致Judge找不到"a.cpp"只好返回Wrong Answer。所以在比赛时文件和文件夹的命名中尽量不要含有空格,含有空格的话早晚会出问题的,这一点我是有着惨痛的教训的,我电脑文件和文件夹中的空格自从发现这个缺点之后就全被改成下划线了。

ps:又想起来几个小错误来发一下,省的过几天就忘了。我能帮点小忙感到非常开心,其实举办比赛劳心费神老师才是最辛苦的。

 

查看原文(学校论坛凌风阁)

 

 

阅读(1622) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~