#N0222. 沉着冷静【NOIP2023模拟赛T3】
沉着冷静【NOIP2023模拟赛T3】
题目描述
快乐交互!
33 按照 LK-99 论文做出来了 块材料。这些材料从 到 进行编号。
经过测试后,每块材料都有一个超导温度 。有恰好两块成功材料的超导温度都是 ,另外 块失败材料的超导温度都是 ()
33 把这些材料弄乱了,他需要你帮忙找出那两块成功材料。
你可以使用实验室里的一台特殊的“超导温度测试仪”,每次你可以选择一些材料放进去,这台测试仪会告诉你“所有放进去的材料”的“超导温度的异或和”。这台仪器耗电太大了,目前 33 剩余的电费只够开启 次,这需要你好好规划使用方法。
请使用最多 次仪器,来帮助 33 找到两块成功材料的编号!
输入格式
输入第一行包含三个整数 ,含义如题所述。
输出格式
你可以按照两种模式进行输出:
- 确认:你需要输出一个字符
!,然后输出两个整数 ,()—— 为两块成功材料的编号。三个内容之间需要空格隔开。当你这样输出后,你需要结束程序。 - 测试:你需要输出一个字符
?,接下来输出一个整数 ()即你需要放入仪器的材料数量,紧接着需要输出 个不同的正整数 ()即你需要测试的材料编号。同样的,所有内容之间需要空格隔开。- 当你输出测试内容后,交互器会给你一个测试结果,你需要输入这个整数。
- 注意你最多只能测试 次。如果你测试次数超过 次或者有错误格式的输出,你会得到一个
-1的结果,然后Wrong answer。
请注意你在每次输出之后需要刷新缓冲区,否则你的输出只会停留在缓冲区,交互器无法得到你的输出,你也无法得到交互器的结果。
在 C++ 中,fflush(stdout);、std::cout.flush(); 和 std::cout << std::flush; 都可以实现刷新缓冲区操作。(使用 std::cout << std::endl 换行时也会自动刷新缓冲区,但是 std::cout << '\n' 不会)
4 2 1
2
1
1
? 3 1 2 3
? 1 1
? 1 3
! 1 3
样例解释
样例的四块材料的超导温度分别为:
样例输出给出了一种提问模式:
- 第一个询问的答案是
- 后面两个询问的答案都是
数据规模与约定
- 对于 的数据:
- 对于另外 的数据:保证两个成功材料相邻
- 对于另外 的数据:保证
- 对于另外 的数据:保证
- ,
相关
在下列比赛中: