#P3065. 「ROI 2016 Day2」DNA 解码

「ROI 2016 Day2」DNA 解码

题目描述

暂不支持评测

译自 ROI 2016 Day2 T2. Расшифровка ДНК

某古生物的 DNA 是一条包含 nn 个脱氧核苷酸的序列,但是该生物的 DNA 中核苷酸的种类可能与现代生物不同。

某种机器可以扫描 DNA 中连续的一段,并给出该段中包含多少核苷酸。然而你只能使用这种机器至多 qq 次。

试求出该 DNA 中包含多少种核苷酸(假设包含 kk 种)。此外,你还需要给这 kk 种核苷酸编号(比如 GMP→1,AMP→2),然后给出用编号形式表示的完整 DNA 序列(比如 ATGC->2314)。请注意,你给出的 DNA 序列可以与标准答案中的不同,你只需保证:同种核苷酸使用编号相同,且不同种核苷酸编号不同。

交互方式

本题使用标准输入输出进行交互。

首先,你的程序可以从 stdin 读取一个整数 nn

你可以通过输出 "   ⁣? i j   ⁣\;\!\texttt{?}\ i\ j\;\!" 来查询 DNA 的第 iji\sim j 个核苷酸中有多少种不同的核苷酸。交互器在接收到你的查询后,会在 stdin 中给出答复。

如果你得出了答案,请输出 Ready!,下一行输出 kk,再下一行输出 nn 个整数,表示 DNA 序列。

你需要在输出你要执行的命令后刷新 stdout 的缓冲区来将命令发送到交互器。

  • 如果你使用 C++ 且使用 iostream 系列,可以输出 std::flushstd::endl 来刷新缓冲区。
  • 如果你使用 C/C++ 且使用 cstdio,那么请调用标准库函数 fflush(stdout) 来刷新。
  • 如果你使用 Python,请使用 sys.stdout.flush()
  • 如果你使用 Java,请使用 System.out.flush()
123
123

数据范围与提示

子任务 # 分值 1n1⩽ n ⩽ 1k1 ⩽ k ⩽ q=q=
1 20 300300 22 7200072000
2 25 nn
3  25  30003000 1010
4 15 nn
5  15  3600036000