#CF1918E. ace5 与任务排序
ace5 与任务排序
E. ace5 与任务排序
时间限制:每个测试 秒
内存限制:每个测试 MB
这是一道交互题!
在新一轮比赛中,共有 道难度从 到 的任务。协调员决定让第一轮的任务不按难度顺序出现,于是重新排列了任务,得到一个从 到 的难度排列。之后,协调员要求 ace5 通过以下方式猜出这个排列。
初始时,协调员在 到 之间选择一个数 。
ace5 可以提出如下形式的询问:? i。回答将是:
>,若 ,然后 增加 。<,若 ,然后 减少 。=,若 ,然后 保持不变。
ace5 的任务是在不超过 次询问内猜出排列。由于 ace5 忙于撰写公告,他把这个任务交给了你。
输入
第一行包含一个整数 ()——测试用例的数量。
交互过程
你的程序与评测系统之间的交互从读入一个正整数 ()开始, 为隐藏排列的长度。
要提出询问,输出一行形如 ? i 的内容,其中 。
作为回答,你将收到:
>,若 ,然后 增加 。<,若 ,然后 减少 。=,若 ,然后 保持不变。
你最多可以进行 次询问。要输出答案,需要打印 ! a_1 a_2 ... a_n,其中 ,且所有元素互不相同。输出答案不计入询问次数。
如果你的程序在一个测试用例中进行了超过 次询问,或发出了无效询问,则回答将是 -1。收到该回答后,你的程序应立即终止,以获得 Wrong Answer 判定。否则,可能会得到其他判定。
在输出询问后,请不要忘记打印换行符并刷新输出缓冲区。否则,你会收到 Presentation Error 判定。刷新缓冲区的方法:
- C++:
fflush(stdout)或cout.flush() - Java:
System.out.flush() - Pascal:
flush(output) - Python:
stdout.flush() - 其他语言请参考对应文档。
保证所有测试用例的 之和不超过 。
本题的交互器 不是 自适应的。
Hacks(构造数据):
要构造一个 hack,使用如下格式:
第一行包含一个整数 ——测试用例的数量。
每个测试用例的描述包含两行。第一行包含整数 和 ()——隐藏排列的长度和数字 的初始值。第二行包含 个互不相同的整数 ()——评测系统在该测试用例中使用的排列。
所有测试用例的 之和不超过 。
样例
输入
2
5
>
=
<
=
<
<
2
>
输出
? 4
? 2
? 1
? 5
? 1
? 3
! 2 4 1 5 3
? 1
! 2 1
说明
在第一个测试用例中,隐藏排列 ,初始 。
在第二个测试用例中,隐藏排列 ,初始 。