荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: kaman (天外飛仙), 信区: ACMICPC
标  题: ACM入门指引(一)
发信站: 荔园晨风BBS站 (Fri Mar 17 15:30:55 2006), 站内


校内赛逐渐临近,看了一下前两次周赛的情况,发觉还有不少有兴趣同学
没有领进门来,所以趁有时间,写写比赛要注意的一些东西。
第一篇,就先告诉大家怎样通过一道a+b=?的题目
(老手就不要往下看了)

ACM的题目的输入输出都是严格规范的,如果你输出的就算多一个空格,
也是相当于没有做对这道题目,而得到一个Presentation Error (P.E)

输入的格式没有一定的规范,不过一般都会严格按照题目中的Input的描述。
而ACM的比赛中一般都是多组测试数据的,简单说就是你的程序运行一遍要处理
多组的测试数据。

SZU Online Judge上的题目的Input的格式多是这样的:

测试数据的组数n
第1组测试数据
第2组测试数据
第3组测试数据
.
.
.
第n组测试数据

比如说a+b=?这道题目按照上面说的格式给出这样的测试数据

3
1 2
0 1
10000 99999


你的程序就要先读入n(这里等于3),然后对接下来的n组输入做处理。
一般输入用scanf做格式控制已经足够了,详细怎样用可以请教任何一本
c语言的书。根据题目中Input的描述,n为整数,所以这里可以用

        scanf( "%d", &n );

把n读入。接下来就要你的程序自动的处理n组的测试数据,很明显这里
用一个

       for( t=0;t<n;t++ ){ }

的循环就行了。这里顺便提一个问题,周赛中发现不少同学喜欢先把输入数据
全读进来再进行处理,例如a+b=?中,就是有人喜欢这样:

        int in[MAXTESTCASE][2], n, i;   //  MAXTESTCASE为最大输入组数
        scanf( "%d", &n );
        for( i=0;i<n;i++ )         // 把n组测试数据都读到in数组
                scanf( "%d%d", &in[i][0], &in[i][1]);
        for( i=0;i<n;i++ )    // 输出结果
                printf( "%d\n", in[i][0]+in[i][1]);

细心一点就可以发现上面两个for循环是可以合并在一起的:

        for( i=0;i<n;i++ ){
                scanf( "%d%d", &in[i][0], &in[i][1]);
                printf( "%d\n", in[i][0]+in[i][1]);
        }

再细心点的同学应该还可以发现其实in数组根本没必要,因为每组测试数据之间
是相互独立的,处理完一组,这组测试数据就没用了,可以覆盖掉,所以
程序完全可以写成这样子:

        int a,b;   //把in[MAXTESTCASE][2]改成两个变量
        for( i=0;i<n;i++ ){
                scanf( "%d%d", &a, &b);
                printf( "%d\n", a+b);
        }

这样程序不仅敲少了不少字母,而且占用的内存是原来的1/n,何乐而不为呢?
其实做多两题你就会发现更多这样做的好处,甚至有时候一组测试数据还没
输入完就要开始处理,以简化程序和获得更好的速度,alec把这称作online处理。

至于Output,就一定要按照题目中Output的描述,多一个或少一个空格都只能等着
评测系统返回个大大的P.E给你。就如a+b=?中,如果Output的描述说

Print a single output line giving the sum of A and B.

你就得一个printf( "%d\n", a+b);完事好了。

不过说到底,输入输出最重要的就是灵活处理,也就是“自己执生”,可以做多点题
积累多点经验。

看完这篇文章就去找几题练练手吧:

Judge                               题号        题目名称
http://acm.uva.es/p                 100          3n+1
http://192.168.14.237/judge         1001     IMMEDIATE DECODABILITY
http://acm.pku.edu.cn/JudgeOnline   1000         A+BProblem

这篇专讲输入输出的就到这里为止,下一篇转讲比赛规则及相关的东西,
欲知后事如何,请听下回分解了。请啊!



--
抓緊時間把感情的帳單
好好去認認真真一一的清還
為身邊每個人
不要怠慢


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.111.200]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店