#P12362. [eJOI 2024] 霍拉舞 / Hora

    ID: 13926 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>2024交互题Special JudgeeJOI(欧洲)

[eJOI 2024] 霍拉舞 / Hora

题目背景

这是一道交互题!

特别提醒:本题为 0-indexed。

为了适配洛谷评测机,本题改用 IO 交互。

题目描述

在第 88 届 eJOI 举行之际,NN 位选手正围成一圈跳霍拉舞!这里,NN 是一个正偶数,且这 NN 名选手中男女人数相同。组织者为每名选手分配了一个编号,从 00N1N-1。编号是顺着分配的,也就是说,iii1i-1i+1i+1 相邻;特别的,0011N1N-1 相邻。

你并不知道哪些选手是男生,哪些选手是女生。但是,由于你正在比赛中,所以你只能向评测机问问题!在一次问题中,你可以给两个整数 LLRR,保证 0L,R<N0 \le L,R < N,然后:

  • 如果 LRL\le R,评测机会返回 [L,R][L,R] 中男生的数量。

  • 否则,评测机会返回 [L,N1][L,N-1][0,R][0,R] 中总共男生的数量。

给你一个 KK,现在,你需要通过询问评测机若干个如上问题,来找到这个环中长度为 KK 的一段,使得这一段中男生和女生人数差最小。你需要输出在圆上连续的这一段的起点 SS。如果有多个这样的 SS,你可以输出任意一个。

输入格式

输入一行两个整数 N,KN,K

输出格式

如果你认为你找到了正确答案 xx,输出 ! x 结束交互。

交互过程

你需要输出 ? L R 来进行询问,评测机会将结果返回到输入中,然后你进行读取。

上述的所有输入都应从标准输入中读入,所有输出都应向标准输出中输出。输出一行后必须清空缓冲区,否则你的评测将被判为 Time Limit Exceeded。清空缓冲区方式如下:

  • 在 C++ 中,使用 fflush(stdout)cout.flush()
  • 在 Pascal 中,使用 flush(output)
  • 在 Python 中,使用 stdout.flush()
  • 其他语言请自行查阅文档。

如果你的输出格式错误,或执行超过 100000100000 次操作,你的评测将被判为 Wrong Answer。

12 5

6

4

3

? 0 10

? 0 4

? 1 5

! 1

提示

【样例解释】

排列如下:

其中一种正确答案是 11,因为 [1,5][1,5] 中有 3322 女,差为 32=13-2=1,为最小。

【数据范围】

对于 100%100\% 的数据,2N1052 \le N \le 10^5NN 为偶数,1KN1 \le K \le N,交互库不自适应(即,男女生的分布在一开始就已经确定,不会改变)。

Subtask\text{Subtask} 分值 特殊性质 QfullQ_{full}
11 55 N=34N=34 3434
22 1313 N=100000N=100000,所有男孩都相邻 1818
33 88 N=100000N=100000,数据随机 3434
44 1111 N=100000,K=50000N=100000,K=50000 1818
55 1010 N=65536,K=128N=65536,K=128 2626
66 N=100000,K=400N=100000,K=400
77 99 N=100000,K=99601N=100000,K=99601
88 1010 N=100000,K=330N=100000,K=330 6868
99 2424 3434

【计分方式】

在每一个 Subtask\text{Subtask} 中都有 QfullQ_{full} 和分值。假设在你一共询问了 QQ 次。

  • 如果 QQfullQ\le Q_{full} 你就可以得到该测试点的全部分数。

  • 如果 NQQfullN\ge Q\ge Q_{full} 那么你可以得到分值 $\times\Bigg(1-\Bigg(\dfrac{(Q-Q_{full})}{N}\Bigg)^{0.05}\Bigg)$ 分。

  • 如果 Q>NQ>N 那么你不得分。

一个 Subtask\text{Subtask} 的得分是其所有测试点的得分最小值。