【KRUSKAL2026】Punctured Neighborhood
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
这是一道交互题。
有一个未知序列 ,元素是 或 ,下标从 开始。你可以进行多次询问,每次询问指定中心 以及半径 ,交互器将返回 的下标去心邻域 内 的个数。尝试确定 中一共有多少个 。
注意,你询问的区间不能超出序列本身的边界。
交互方式
本题有多组测试数据。
首先读入一行,仅包含一个正整数,表示数据组数 。
对于每组数据:
- 首先读入一行,仅包含一个整数 (),表示 的长度。
- 发起询问时,需要以
? m r的格式输出一行并清空缓冲区,要求 。然后读入一行,包含一个非负整数,表示 的值。 - 当你确定答案后,以
! x的格式输出一行并清空缓冲区,其中 表示 中 的个数。 - 特别地,若无论如何询问都不可能确定答案,输出一行
! -1并清空缓冲区。
每组数据的询问次数不能超过 。
任何不符合交互要求的输出,包括交互格式错误、超出交互次数限制等,都会导致未定义的运行结果。
样例
2
4
1
1
5
4
2
? 2 1
? 3 1
! 2
? 3 2
? 2 1
! 5
提示
样例展示了一个可能的交互过程,两组数据中的未知序列分别为 1100 和 11111。
如何清空缓冲区:
- 在 C 和 C++ 中,使用
fflush(stdout)(如果你使用printf)或cout.flush()(如果你使用cout)。 - 在 Python 中,使用
stdout.flush()。 - 特别地,在 C++ 中,使用
cout<<endl会自动清空缓冲区。
2026 新生赛
- Status
- Done
- Rule
- XCPC
- Problem
- 13
- Start at
- 2026-9-13 12:00
- End at
- 2026-9-13 17:30
- Duration
- 5.5 hour(s)
- Host
- Partic.
- 127