Q:数据从那里输入?输出到哪里?
A:本次比赛的输入输出都是标准输入和标准输出。例如在C/C++中可以直接使用cin, cout。
Q:我在本地如何进行测试?
A:将你的程序编译成可执行文件后(假设为prog.exe),将输入数据写在一个文件中(假设为in.txt)。在命令行模式下,使用文件重定向来测试。例如:
Prog < in.txt。也可以将结果写到另一个文件中,如prog < in.txt > out.txt。这种方式可以读取到文件结束符。
Q:输入输出是否有一定要求?
A:是的。试题中对于输入输出都有严格说明,必须按照这个标准进行。否则程序将不能得到正确结果。
Q:Compiler Error(编译错)是什么含义?
A:这说明你的程序在服务器上出现编译错误,请查看详细信息确定错误的具体内容。并请检查提交时是否选择了正确的语言。
Q:Runtime Error(运行错)是什么含义?
A:这说明你的程序在运行期间出现了某些错误。常见的错误包括:除零错误,数组越界,指针指向的单元不存在等。还有一种可能就是在C/C++中,main函数的返回值不是0。
Q:Time Over(超时)是什么含义?
A:每一个题目都有一个最大运行时间的要求(在试题中明确标出),如果你的程序的运行时间超过这个要求,将被强制停止,并返回这个错误。这种情况可能是
由于程序中错误地出现了死循环,也可能是因为你的算法不够优化,这就需要重新
设计算法和数据结构。
Q:Output Too Much(输出过多)是什么含义?
A:在系统中,为管理资源,对每个程序的输出数量是有限制的。出现这种情况,一般都是因为程序中错误地出现了死循环,不断输出一些错误结果。
Q:Wrong Answer(结果错)是什么含义?
A:这是一种最常见的错误,也就是说明你的程序的计算出的结果不对。如果你在本地测试正确,则要注意到判决时所使用的可能是各种符合要求的数据,需要考虑你的算法是否考虑到了所有情况。
Q:Presentation Error(格式错)是什么含义?
A:如果输出中只有空格和回车与答案不一样,则返回这个错误。在试题中均有严格说明,请仔细察看题目,尤其是空行。这个错误一般标志算法的基本方案已经正确了,离正确解答只有一步之遥。
语言细节
Q:比赛中所使用的编译器是什么?
A:在服务器上使用g++、fpc。在本地,由于条件限制,使用vc等。
Q:在C/C++中,main函数应该如何写?
A:应该写成: int main(){… return 0;}。请特别注意main函数的类型是整型,并且返回值为0。否则会导致Runtime Error。
Q:我的程序在VC中编译正确,提交后出现Compiler Error,具体信息是:
name lookup of `j' changed for new ISO `for' scoping
这是什么原因?
A:这是由于VC中存在与C++标准不兼容的部分,一般是如下类型的程序段引起的:for (int j=0; j<10; j++){…} j=10;
也就是说,在C++标准里,这种方式定义的变量j的作用域限制在for循环内部。如果要在for循环外继续使用这个变量,请将其定义提前到循环前。即如下例:
int j;
for (j=0; j<10; j++){…}
j=10;
Q:C/C++中,如下的错误信息是什么含义?
the `gets' function is dangerous and should not be used
A:gets函数作为一个危险的函数,可以造成系统的漏洞,因此不建议使用。如果要读取一行字符,可以使用cin.getline();
Q:我是否可以使用VC中的MFC类库?
A:不可以。作为替代
方案,可以使用STL中的容器等工具。
Q:我是否可以使用C++中的STL?
A:可以。但是要注意VC中的STL存在一些与GNU编译器不一致的部分。最好使用那些已经被证明正确的部分。
Q:我是否可以使用动态内存?
A:可以。但是这样的程序不好调试,因此除非必要,建议避免使用。一般情况下可以直接申请一个足够大的数组等。
Q:我使用PASCAL语言,在读数据时经常出现错误,为