作者math120908 (小小郭)
标题[转录][关於] 写 Online Judge part.2
时间Wed Oct 20 08:33:29 2010
※ [本文转录自 math120908 信箱]
作者:
[email protected] (
[email protected])
标题: [关於] 写 Online Judge part.2
时间: Wed Oct 20 08:33:10 2010
作者: skyly (skyly) 看板: NextArcadia
标题: [关於] 写 Online Judge part.2
时间: Wed Oct 20 01:48:45 2010
这次要谈的是有关写
Online Judge 题目的
Input 所需要注意的一些事项.
首先,
通常 Online Judge 的题目可以分为
两大类型:
Batch problems (normal case) 跟
Interactive problems
Batch problems 也就是平时较常看到的问题,
就是给你的测试资料是一次给定的, 讲白一点即你可以随时读资料随时输出资料.
例如你可以一笔一笔慢慢的作, 也可以全部读进来一起做再一口气输出.
Interactive problems 一般称做
互动题, 这种题目比较少见.
对於一题互动题, 你可能要 include 一些题目提供的 header files,
然後或许要使用一些题目给订的 functions 之类的, 因题而异.
最特别的一点是你主要是要
跟 judge system 互动,
例如说你可能要做一些 function calls 传入一些值才能继续作下去之类的.
//TIOJ 1087 或许是一个不错的例子
接着要谈的是关於题目的
输入型态,
在这边我们只讨论
Batch 题, 也就是一般的题目的情况.
我们对於一个 Batch 题目的输入, 通常分作
单笔输入 和 多笔输入(循环输入)
所谓的
单笔输入 例如 Judgegirl 就是一个很好的例子,
意思就是对於每一笔测试资料, 都重新将 input 导入你的执行档.
(maybe 是分做很多档案)
来一个 example:
请输入一个整数 n, 并输出 n.
那麽你可以这样写:
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
printf("%d\n", n); //记得我们上次说的要换行吗?
return 0;
}
这种写法就是针对所谓的单笔输入.
而单笔输入的题目通常在题目中会有一些关键的句子告诉你是单笔输入,
例如说
"本题只有一笔测试资料", 但这并
不代表这题真的
只有一笔测试资料,
而只是要提醒你该题是属於单笔输入的题目.
另一种更为常见的则是
多笔输入(或称作 循环输入),
意思就是你每一次程式的执行都要
读多笔的测试资料,
而其中又分为
1. 以 EOF 作结束 2. 以限定条件做结束
example for
case 1:
本题有多笔输入, 以 EOF 作为结束.
对於每一笔输入给定两个整数 a, b, 请输出 a+b 的结果.
那麽你可以这样写:
#include <stdio.h>
int main() {
int a, b;
while ( scanf("%d%d", &a, &b) != EOF ) { //这个助教应该有提过
printf("%d\n", a + b );
}
return 0;
}
实际题目的话你可能会见到以下关键句, 来判定这题是属於
EOF 类 的多笔输入题:
"There are multiple input in the testcase. The input is ended by EOF."
example for
case 2:
本题有多笔输入, 对於每一笔输入一个正整数 a, 请输出 a+1 的结果.
以 a=0 作为结束.
那麽你可以这样写:
#include <stdio.h>
int main() {
int a;
while ( scanf("%d", &a) != EOF ) {
if ( a == 0 ) break;
printf("%d\n", a + 1 );
}
return 0;
}
对於这种 case, 题目会说明该以什麽条件做为输入的结尾,
如 example 中的
a=0 就是输入结尾的
条件.
那麽或许你会有个
问题, 如果题目
都没说的话怎麽办?!
此时你应该先以
" EOF 多笔输入 " 作为第一考量, 比较不容易错.
Input 所需要注意的一些部分大致上介绍到这里.
是说包括这次提的 Input 或者是上次讲的 Output,
其实都还有很多细节尚未说明到, 只是在此先举出一些常见的问题.
其中包括很多因素, 比如说有些观念还没有教到等等,
那其实也没有必要急着去钻那些点, 所以在这两篇文中我就没有多提.
不过如果大家真的有遇到除了这些以外的问题还是欢迎来提问~
那麽就先这样了.
--
※ 发信站: 批踢踢兔(ptt2.cc)
◆ From: 123.194.173.14
1F:→ ryan8175ptt2:太用心了Q_Q 我要推暴她(?) 不是啦推暴这篇文推 10/20 07:46
2F:→ math120908:继续转转转:p推 10/20 08:32
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.137
3F:推 m80126colin:强者用心读者认真推 10/20 09:13
4F:推 s864372002:还有第三个类型 - 在开头给定资料笔数~ 10/20 09:45
5F:推 skyly:抱歉昨天太晚打脑筋不清楚竟然漏了...Orz 我原文加上去了XD 10/20 23:19