CF2135D2.From the Unknown (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

这是该问题的高难度版本。两种版本的区别在于,在本版本中,所有询问中所有文章的长度之和不得超过 2.5⋅1042.5\cdot 10^4。你只有在解决了该问题的所有版本后才能进行 hack。

这是一个交互题。

RiOI 团队最近开发了一个名为 RiOI Editor 的文本编辑器。该编辑器只有一个整数参数 WW —— 每行的宽度。已知 1≤W≤1051 \leq W \leq 10^5。

由于你无法理解 RiOI 语言,在你看来,单词之间唯一的区别就是它们的长度。因此,长度为 nn 的一篇文章被定义为一个长度为 nn 的序列 aa,其中 aia_i 表示第 ii 个单词的长度。RiOI 编辑器显示文章 [a1,a2,…,an][a_1, a_2,\ldots, a_n] 的方式如下:

  • 如果 max⁡(a1,a2,…,an)>W\max(a_1, a_2, \ldots, a_n)\gt W,编辑器无法显示该文章;
  • 否则,编辑器能通过以下过程显示该文章:
    • 初始时 l=1l = 1,s=0s = 0。在整个过程中,ll 始终表示当前的行数,ss 始终表示当前最后一行的单词长度之和;
    • 然后,对于每个 1≤i≤n1\le i\le n:
      • 如果 s+ai≤Ws + a_i \leq W,则将该单词插入当前行末,ll 不变,ss 增加 aia_i;
      • 否则,将该单词插入新的一行,ll 增加 11,ss 变为 aia_i。
    • 显示这篇文章所需的行数即为最终的 ll。

你对该编辑器很感兴趣,因此你决定通过向编辑器输入一些文章,并观察显示该文章所需行数,来推测 WW 的值。

具体来说,你最多可以询问评测机 22 次。每次询问时,你向编辑器输入一篇文章 [a1,a2,…,an][a_1, a_2, \ldots, a_n](1≤n≤1051\leq n \leq 10^5),编辑器将回复:

  • 如果编辑器可以正常显示该文章,则返回显示此文章所需的行数;
  • 如果编辑器无法显示,则返回 00。

本版本的额外限制:所有询问中文章的总长度(即 nn 的总和)不得超过 2.5⋅1042.5\cdot 10^4。

输入格式

每组测试数据包含多个测试用例。首行为测试用例数 tt(1≤t≤101 \le t \le 10)。接下来是每个测试用例的描述。

输出格式

(交互题,无输出格式,详见题面)

输入输出样例

  • 输入#1

    2
    
    2
    
    1
    
    
    0

    输出#1

    ? 5 1 9 4 6 1
    
    ? 2 10 10
    
    ! 20
    ? 1 2
    
    ! 1

说明/提示

在第一个测试用例中:

  • 第一次询问,所有单词的总长度为 1+9+4+6+1=211+9+4+6+1=21,文章被分为两行显示,所以 W<21W\lt21;
  • 第二次询问,所有单词长度为 10+10=2010+10=20,文章仅用一行显示,所以 W≥20W\ge 20。

由此可确定 W=20W = 20。

在第二个测试用例中,只有一次询问,并且编辑器无法显示该文章。因此 W<2W\lt 2,所以只能是 11。

由 ChatGPT 5 翻译

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

首页