Skip to content

特殊题目类型

massimodong edited this page Aug 12, 2017 · 1 revision

目前支持交互题和提交答案题。
如果需要向用户下发文件,请将文件压缩到download.zip,并放到数据目录下。

交互题

交互题要求用户通过调用提供的接口,完成题目要求的一个函数。系统通过调用用户实现的函数来进行评测。
对于交互题,题目的spj选项被忽略,强制开启spj,所以数据目录内必须存在spj.cc文件,且其写法与普通题目的spj没有差异(除了可以与用户程序进行“交互”之外)。 你可以先看一遍样例题目里的spj.cc文件,对理解以下内容有帮助。

交互方式

为了避免各种奇奇怪怪的问题,使用真·交互。
即,交互程序(spj)与用户程序同时运行,它们之间使用标准输入输出“交流”,spj的标准输出重定向到用户程序的标准输入,反之用户程序的标准输出也重定向到spj的标准输入。即用spj "printf"过去的内容用户程序可以用"scanf"来接收,反过来也一样。
因为spj用C++语言实现,所以可以用printfcout函数向用户程序发送数据,用scanfcin函数接收用户程序发送的数据。
使用printfcout发送完数据时,请务必再输出一个回车符,并且并且使用fflush(stdout)来强制将数据发送,否则会造成用户程序的scanfcinread(Pasca)陷入无限等待。

交互库的写法

以下内容请配合样例题目里相应的文件一同阅读,因为。。。我说不清楚。
交互库即为特定的语言实现交互接口的封装,使得用户不必关心自己的程序是“怎样”与spj进行交互的,而只需要实现题目要求的函数。

C/C++

请将交互库命名为interact.h并放在数据目录下。 用户可以通过
#include"interact.h"
来包含交互库。
交互库可以像spj那样用标准输入输出函数接发数据。

Pascal

出题人需要实现interact.pasinteract_main.pas两个文件
其中interact.pas是一个pascal单元,里面实现了所有用户可以使用的接口。
interact_main.pas则是一个Pascal程序,它进行必要的初始化,并且调用用户提交的函数。
可以用标准输入输出函数write,writeln,read,readln等接发数据。 write等函数发送完数据时,请务必再输出一个回车符。请每次用Flush(Output)来强制将数据发送,否则会造成spj的读取陷入无限等待。
用户实现的应为一个名为solution的单元,由interact_main调用。
如果你不知道什么是Pascal单元。。。请让用户放弃使用Pascal做这道题。

其他语言

对于其他语言,暂时(或者永远)无法配置交互库,用户需要自己向标准输入输出接发数据。请不要忘记发送的每项内容(比如一个数字)用空格或回车隔开,并且每次用清除流缓存的方法强制将数据发送。

提交答案题

把要下发的数据压缩到download.zip即可。

Clone this wiki locally