NOI交互题
交互题
交互题 是需要选手程序与测评程序交互来完成任务的题目。
一类常见的情形是,选手程序向测评程序发出询问,并得到其反馈。测评程序可能对选手的询问作出限制,或调整应答策略来尽可能增加询问次数,这也给题目带来了更多变化。
交互方式主要有如下两种。虽然技术上有不小的差异,但在考察算法的本质上它们并没有实际区别。
STDIO 交互
STDIO 交互(标准 I/O 交互)是 Codeforces、AtCoder 等在线平台的交互手段,也是 ICPC 系列赛事中的标准。
Grader 交互
Grader 交互方式常见于 IOI、APIO 等国际 OI 赛事(特别是 CMS 平台的竞赛)。
这里我们重点讲下第二种 Grader 交互
由于交互题输入输出较为繁琐,所以建议分别封装输入和输出函数。
比赛时如果出题人给出了 grader 头文件(用于 grader 交互题的调试)或者 checker 程序(用于 stdio 交互题的调试),则交互题的调试比较简单,因为交互题的对拍会比普通题目的对拍困难很多。没有 testlib.h 的情况下。交互细节较多的题目的 stdio 交互库会一般有 3k 代码量,再加上 3k 长度的对拍器,至少需要一小时实现。但是,无论是否有调试程序,调试交互题的代码都往往需要选手模拟与程序的交互过程,因此交互题需要选手能设计出高质量的程序,尽量保证一遍做对,同时拥有较强的静态查错能力。
线上提交
这里我们通过这道题可以实现一道简单的交互题。但是有一个问题: 怎么实现本地调试呢?
本地调试
我们先花大概20分钟时间,再认真的阅读这个模板题。把需要的资料下载下来。
接着,我们怎么本地调试这个代码呢?
首先,先分析下这个文件的功能吧
interaction.cpp
:这是一个交互库。比赛的时候一般会给。
结果在我编译的时候,失败了。。。。失败原因:这个cpp
文件需要加载一个外部库testlib.h
。
这个又是个什么东西???
查了一下 OIWIKI。详情看下这个 :testlib
在github 下载testlib.h
后,把文件直接复制到 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include
里。 是不是觉得我的路径很复杂。我也不知道对DEV C++
干了啥。
interaction.h
: 这里封装了一些程序函数。比如:输入输出,处理函数(dfs, solve, work
)等。一般要自己写
std.cpp
: 这个就是我们要写的主程序。当然你可以把interaction.h
写在std
里。只是文件会比较大而已(不影响)
到这里。我们运行interaction.cpp
和 std.cpp
生成exe
文件后。运行std.exe
文件即可完成本地调试工作。