-
Notifications
You must be signed in to change notification settings - Fork 7
特殊题目类型
目前支持交互题和提交答案题。
如果需要向用户下发文件,请将文件压缩到download.zip
,并放到数据目录下。
交互题要求用户通过调用提供的接口,完成题目要求的一个函数。系统通过调用用户实现的函数来进行评测。
对于交互题,题目的spj选项被忽略,强制开启spj,所以数据目录内必须存在spj.cc
文件,且其写法与普通题目的spj没有差异(除了可以与用户程序进行“交互”之外)。
你可以先看一遍样例题目里的spj.cc
文件,对理解以下内容有帮助。
为了避免各种奇奇怪怪的问题,使用真·交互。
即,交互程序(spj)与用户程序同时运行,它们之间使用标准输入输出“交流”,spj的标准输出重定向到用户程序的标准输入,反之用户程序的标准输出也重定向到spj的标准输入。即用spj "printf"过去的内容用户程序可以用"scanf"来接收,反过来也一样。
因为spj用C++语言实现,所以可以用printf
或cout
函数向用户程序发送数据,用scanf
或cin
函数接收用户程序发送的数据。
使用printf
或cout
发送完数据时,请务必再输出一个回车符,并且并且使用fflush(stdout)
来强制将数据发送,否则会造成用户程序的scanf
或cin
或read
(Pasca)陷入无限等待。
以下内容请配合样例题目里相应的文件一同阅读,因为。。。我说不清楚。
交互库即为特定的语言实现交互接口的封装,使得用户不必关心自己的程序是“怎样”与spj进行交互的,而只需要实现题目要求的函数。
请将交互库命名为interact.h
并放在数据目录下。
用户可以通过
#include"interact.h"
来包含交互库。
交互库可以像spj那样用标准输入输出函数接发数据。
出题人需要实现interact.pas
和interact_main.pas
两个文件
其中interact.pas
是一个pascal单元,里面实现了所有用户可以使用的接口。
interact_main.pas
则是一个Pascal程序,它进行必要的初始化,并且调用用户提交的函数。
可以用标准输入输出函数write
,writeln
,read
,readln
等接发数据。
用write
等函数发送完数据时,请务必再输出一个回车符。请每次用Flush(Output)
来强制将数据发送,否则会造成spj的读取陷入无限等待。
用户实现的应为一个名为solution
的单元,由interact_main
调用。
如果你不知道什么是Pascal单元。。。请让用户放弃使用Pascal做这道题。
对于其他语言,暂时(或者永远)无法配置交互库,用户需要自己向标准输入输出接发数据。请不要忘记发送的每项内容(比如一个数字)用空格或回车隔开,并且每次用清除流缓存的方法强制将数据发送。
把要下发的数据压缩到download.zip
即可。