#C00003D. puzzle game
puzzle game
题目背景
Han24666正在玩密室逃脱游戏
题目描述
密室里有一个长度为 n 的未知排列 (排列定义:,所有元素互不重复)。Han24666可以向交互面板发起两种类型的询问(见下方),每种询问有明确的格式和返回规则,但需要知道原序列是什么才能打开大门,Han24666请求你帮助
询问类型说明
-
区间奇偶统计询问 格式:
? count l r t参数说明:- :表示询问的区间范围(左端点~右端点)
- :t=0 表示统计偶数数量,t=1 表示统计奇数数量 返回值:整数,表示区间 内符合 t 类型的数字个数 次数限制:最多 次
-
位置比较询问 格式:
? cmp x y参数说明:- 且 :表示要比较的两个位置
返回值:字符,
>表示 ,<表示 ,=表示 (实际不会出现) 次数限制:最多 次
- 且 :表示要比较的两个位置
返回值:字符,
答案规则
格式:! a[1] a[2] ... a[n]
要求:
- 输出完整的秘密序列,元素间用单个空格分隔;
- 输出后程序必须立即终止,否则密室面板会判定解谜失败;
- 答案必须是合法的 1~n 排列,否则直接判定错误。
交互格式
完整交互流程
- 程序启动后,首先从标准输入读取整数 n(序列长度,1 ≤ n ≤ 5000);
- 程序输出询问行 → 强制刷新输出缓冲区 → 读取交互面板返回值;
- 重复步骤 2,直到确定完整序列(总询问次数需满足两种类型的次数限制);
- 程序输出答案行 → 强制刷新输出缓冲区 → 终止程序。
交互示例(n=4,秘密序列为 [3,1,4,2])
程序读取:4
程序输出:? count 1 4 1
交互面板返回:2
程序输出:? cmp 1 2
交互面板返回:>
程序输出:? cmp 3 4
交互面板返回:>
程序输出:! 3 1 4 2
数据限制
1 ≤ n ≤ 5000
区间奇偶统计询问次数 ≤ 2n
位置比较询问次数 ≤ n log n
总询问次数无额外限制(满足上述两类限制即可)
时间限制:2000ms
空间限制:512MB
禁止行为 & 格式要求
禁止操作(触发解谜失败)
- 区间奇偶统计询问中,l > r 或 t 不为 0/1;
- 位置比较询问中,x = y 或 x/y 超出 1~n 范围;
- 超出任意一种询问的次数限制;
- 询问格式错误(如缺少参数、多余空格、类型拼写错误);
- 输出答案后未立即终止程序。
输出缓冲区刷新要求
交互过程中,所有输出(询问行、答案行)后必须强制刷新缓冲区,否则面板无法实时接收信息,判定超时(TLE)。不同编程语言的刷新方式:
- C++:fflush(stdout) / cout.flush()(需包含 头文件);