CF2096G.Wonderful Guessing Game
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是一道交互题。
你是千年科学学校的一名自豪的教师。今天,一名叫 Alice 的学生向你发起了一个猜数游戏的挑战。
Alice 心中想着一个 1 到 n 之间的整数,你必须通过向她提出一些查询来猜出这个数。
为了增加难度,她要求你必须先提出所有查询,而她将忽略其中的恰好 1 个查询。
对于每个查询,你需要选择一个由 1 到 n 之间的 k 个不同整数组成的数组,其中 k 是偶数。然后,Alice 会给出以下回应之一:
- L:这个数位于数组的前 2k 个元素中;
- R:这个数位于数组的后 2k 个元素中;
- N:这个数不在数组中;
- ?:这个查询被忽略。
Alice 很没耐心,因此你必须找到一种策略,使得查询次数最少。你能做到吗?
形式化地说,设 f(n) 为确定 Alice 的数字所需的最小查询次数。你需要找到一种恰好使用 f(n) 次查询的策略。
注意,交互器是自适应的,这意味着 Alice 的数字并非一开始就固定,可能会根据你的查询而变化。然而,保证至少存在一个数字与 Alice 的回应一致。
我们可以证明,对于所有满足 2≤n≤2⋅105 的 n,f(n)≤20。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 t(1≤t≤104)。接下来是每个测试用例的描述。
每个测试用例的唯一一行包含一个整数 n(2≤n≤2⋅105)——Alice 的数字的最大可能值。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
交互开始时,先读取整数 n。
然后,输出一个整数 q(1≤q≤20)——查询的次数。
要提出一个查询,请按以下格式输出一行:
- ka1a2…ak(2≤k≤n,k 是偶数,1≤ai≤n,ai 互不相同)——数组的长度和数组本身。
在提出所有 q 次查询后,读取一个字符串 s(∣s∣=q)——Alice 对查询的回应,如上所述。
当你确定 Alice 的数字时,输出一个整数 x(1≤x≤n)——这个数字的值。
然后,继续处理下一个测试用例,如果没有更多测试用例,则终止程序。
在输出所有 q 次查询后,不要忘记输出换行并刷新输出。否则,你将得到 Idleness limit exceeded。为此,请使用:
- C++ 中的
fflush(stdout)或cout.flush(); - Java 中的
System.out.flush(); - Pascal 中的
flush(output); - Python 中的
stdout.flush(); - 其他语言的类似方法。
注意,即使你正确猜出了 Alice 的数字,但如果使用的查询次数超过了 f(n),你也会得到 Wrong answer。
本题禁用 hack。
输入输出样例
输入#1
2 3 ?N 5 R?L
输出#1
2 2 1 2 2 1 2 3 3 4 3 2 4 1 4 5 4 3 1 4 1 5 3 4 1
说明/提示
在第一个测试用例中,n=3。我们提出了 2 次查询:[1,2] 和再次的 [1,2]。
- 对于第一次查询,Alice 的回应是 ?,表示这次查询被忽略。
- 对于第二次查询,Alice 的回应是 N,表示她的数字不在数组 [1,2] 中。
根据以上信息,我们可以确定 Alice 的数字是 3。
可以证明,对于 n=3,所有有效策略至少需要 2 次查询。
在第二个测试用例中,n=5。我们提出了 3 次查询:[3,2,4,1]、[5,4,3,1] 和 [1,5,3,4]。
- 对于第一次查询,Alice 的回应是 R,表示她的数字在数组 [4,1] 中。
- 对于第二次查询,Alice 的回应是 ?,表示这次查询被忽略。
- 对于第三次查询,Alice 的回应是 L,表示她的数字在数组 [1,5] 中。
根据以上信息,我们可以确定 Alice 的数字是 1。
可以证明,对于 n=5,所有有效策略至少需要 3 次查询。
翻译由 DeepSeek V3 完成
输入解题思路,AI测评打分。不知道怎么写?