CF2108D.Needle in a Numstack

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是一个交互式问题。

你在阁楼中发现了数字 kk 和 nn,但丢失了两个数组 AA 和 BB。

你记得以下信息:

  • ∣A∣+∣B∣=n|A| + |B| = n,即两个数组的总长度为 nn。
  • ∣A∣≥k|A| \geq k 且 ∣B∣≥k|B| \geq k,即每个数组的长度至少为 kk。
  • 数组中的元素只包含 11 到 kk 的数字。
  • 如果从数组 AA 中任取 kk 个连续元素,它们都互不相同。同样,如果从数组 BB 中任取 kk 个连续元素,它们也互不相同。

幸运的是,阁楼里的一个善良精灵找到了这两个数组,并将它们连接成一个长度为 nn 的数组 CC。也就是说,数组 CC 的前半部分是 AA 的元素,后半部分是 BB 的元素。

你可以向精灵最多提出 250250 次询问。每次询问提供一个索引 ii(1≤i≤n1 \leq i \leq n),精灵会返回数组 CC 的第 ii 个元素。

你的任务是确定数组 AA 和 BB 的长度,或者报告无法唯一确定它们的长度。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 tt(1≤t≤3001 \le t \le 300)。接下来是测试用例的描述。

每个测试用例仅包含一行,包含两个整数 nn 和 kk(1≤k≤501 \leq k \leq 50,2k≤n≤1062k \leq n \leq 10^6)。

注意,所有测试用例的 nn 之和没有限制。

输出格式

对于每个测试用例,交互开始时需要读取整数 nn。

然后你可以进行最多 250250 次查询。

每次查询时,输出一个格式为 "? x"(不带引号)的字符串(1≤x≤n1 \leq x \leq n)。每次查询后,读取一个整数——查询的答案。

如果你进行了过多的查询,将会得到 Wrong answer 的结果。

当你确定答案时,输出一个格式为 "! a b"(不带引号)的字符串,其中 aa 和 bb 分别是你找到的数组 AA 和 BB 的长度。这个回答不计入查询次数。

如果无法唯一确定数组的长度,输出 "! -1"(不带引号)。注意,如果存在不超过 250250 次查询即可唯一确定数组长度的情况下你回答 −1-1,将会得到 Wrong answer 的结果。

题目保证存在符合题目描述的数组 AA 和 BB,且交互器的输出是正确的。

交互器是非自适应的,这意味着答案在参与者进行查询之前就已经确定,并且不会受到参与者查询的影响。

如果你的程序进行了超过 250250 次查询,应立即终止以避免 Wrong answer。否则,你的程序可能会因为继续读取已关闭的流而得到任意结果。

每次输出查询后,不要忘记换行并刷新输出缓冲区。否则,你可能会得到 "IL"(Idleness limit exceeded)的结果。刷新缓冲区的方法如下:

  • C++:使用 fflush(stdout) 或 cout.flush();
  • Java:使用 System.out.flush();
  • Pascal:使用 flush(output);
  • Python:使用 stdout.flush();
  • 其他语言请参考相关文档。

输入输出样例

  • 输入#1

    6
    5 2
    
    1
    
    2
    
    2
    
    18 4
    
    2
    
    4
    
    1
    
    1
    
    4
    
    3 1
    
    10 5
    
    9 3
    
    3
    
    3
    
    2
    
    12 4
    
    1
    
    3
    
    1
    
    3
    
    1
    
    3

    输出#1

    ? 1
    
    ? 2
    
    ? 3
    
    ! 2 3
    
    ? 9
    
    ? 13
    
    ? 10
    
    ? 14
    
    ? 6
    
    ! 9 9
    
    ! -1
    
    ! 5 5
    
    ? 3
    
    ? 6
    
    ? 9
    
    ! 6 3
    
    ? 1
    
    ? 2
    
    ? 5
    
    ? 6
    
    ? 9
    
    ? 10
    
    ! -1

说明/提示

考虑第一个例子。我们查询了数组 CC 的前 33 个元素(共 55 个)。现在我们知道了数组 CC 的前三个元素为 [1,2,2,?,?][1, 2, 2, ?, ?]。根据条件,数组 AA 中的任意 kk(k=2k=2)个连续元素必须互不相同,因此第三个元素 22 不可能属于数组 AA,它必定属于数组 BB。由此可以确定数组 AA 的长度为 22,数组 BB 的长度为 33。

图中展示了所有测试用例的数组。被查询的元素用黄色标记。

翻译由 DeepSeek V3 完成

输入解题思路,AI测评打分。不知道怎么写?

首页