交互题学习笔记

· · 个人记录

交互

搬运自:blog

练习:题单

交互题 是需要选手程序与测评程序交互来完成任务的题目。一类常见的情形是,选手程序向测评程序发出询问,并得到其反馈。测评程序可能对选手的询问作出限制,或调整应答策略来尽可能增加询问次数,这也给题目带来了更多变化。

—— OI Wiki

一、实现方式

1. STDIO交互

是 Codeforces , Atcoder 等平台以及一般 ICPC 赛制使用的方式 .

选手程序要在运行过程中 , 用标准输出进行一些询问 , 并且从标准输入得到这些询问的结果 , 最后输出答案 .

注意 : 每次输出后要刷新缓冲区才能继续输入 , 可以用fflush(stdout) , std::cout << std::flush 或者 std::cout << std::endl ( 换行同时刷新缓冲区 ) .

2. grader交互

是 NOI, APIO , IOI 等比赛中常用的方式 .

程序中不需要包含 main() 函数 , 而是根据题目要求 , 实现若干个函数 , 评测时由评测程序调用这些函数 . 狭义的交互题 ( 即具有交互性 ) 的题目一般还会提供一些可供调用的查询函数 .

样例方面 , 一般而言 , 会下发 name.hgrader.cpp 两份文件 . 其中 name.h 主要用来链接文件 , 一般无实际意义 . grader.cpp 包含 main() 以及查询函数的实现 . 选手需要实现 name.cpp , 并将两份代码一起编译 , 运行对应的程序就可以调试了 .

由于在 NOI 系列比赛中使用这种方式 , 我们主要讨论这一类方式 .