#P15499. [ICPC 2025 APC] Secret Lilies and Roses

[ICPC 2025 APC] Secret Lilies and Roses

说明

nn 朵花从左到右排成一行,依次编号为 11nn。每朵花要么是百合,要么是玫瑰。对于介于 00nn 之间(包含两端)的整数 jj,令 ljl_{j} 表示最左边 jj 朵花中百合的数量,rjr_{j} 表示最右边 njn - j 朵花中玫瑰的数量。

初始时,你只知道花的数量 nn。花的种类是隐藏的。你可以通过进行 查询 来获取花朵的信息。每次查询,你可以执行以下操作之一。

  • 类型查询: 指定一个介于 11nn 之间(包含两端)的整数 ii。你将收到第 ii 朵花的类型。
  • 乘法查询: 指定一个介于 00nn 之间(包含两端)的整数 jj。你将收到 lj×rjl_{j} \times r_{j} 的值。

你的任务是通过有限次查询找到一个介于 00nn 之间(包含两端)的整数 kk,使得 lk=rkl_{k} = r_{k}。你可以假设对于给定的花朵类型排列,至少存在一个这样的整数。注意,你不需要识别每一朵花的类型。

交互过程

输入的第一行包含一个整数 tt1t1001 \le t \le 100),表示测试用例的数量。之后是 tt 个测试用例,每个测试用例的格式如下。

每个测试用例的第一行包含一个整数 nn1n1001 \le n \le 100)。读取该整数后,你的程序即可开始进行查询。对于每次查询,你的程序应输出一行,包含以下格式之一:

  • type i 表示进行类型查询,其中 ii 为指定的整数(1in1 \le i \le n)。作为响应,输入中将有一行包含一个字符串 lilyrose,表示第 ii 朵花的类型。
  • multi j 表示进行乘法查询,其中 jj 为指定的整数(0jn0 \le j \le n)。作为响应,输入中将有一行包含整数 lj×rjl_{j} \times r_{j} 的值。

对于每个测试用例,你的程序最多允许进行 1010 次查询。这意味着类型查询和乘法查询的总次数不得超过 1010。如果查询次数超过 1010,你将得到“答案错误”的评判结果。

当你的程序确定了某个整数 kk 满足 lk=rkl_{k} = r_{k} 时,应输出一行,格式为 answer k0kn0 \le k \le n)。注意,提供答案不计入查询次数。

输入保证至少存在一个正确答案。如果有多个正确答案,任意一个都将被接受。

输出答案行后,你的程序应开始处理下一个测试用例。当所有 tt 个测试用例都处理完毕后,交互结束,你的程序应当终止。

关于交互式评测的说明:

  • 评测是非对抗性的,即花的类型是预先选定的,而不是根据你的查询动态调整的。
  • 输出后不要忘记刷新输出缓冲区。详情请参见“评测细节”文档。
  • 我们提供了一个用于本地测试的命令行工具,以及对应于示例交互的输入文件。你可以从 DOMjudge 下载这些文件。该工具顶部有注释说明其用法。
2
9

lily

rose

6

3

3

0

rose



type 8

type 1

multi 6

multi 3

answer 5

multi 3

type 3

answer 3

提示

示例交互 #1 的解释

对于第一个测试用例,九朵花的排列如下图所示。对于第三个查询,返回 l6×r6=3×2=6l_{6} \times r_{6} = 3 \times 2 = 6;对于第四个查询,返回 l3×r3=1×3=3l_{3} \times r_{3} = 1 \times 3 = 3。由于 l5=r5=3l_{5} = r_{5} = 3k=5k = 5 是一个正确答案。

:::align{center} :::

对于第二个测试用例,假设所有三朵花都是玫瑰。

翻译由 DeepSeek 完成