P11351 [NOISG 2024 Finals] Toxic Gene 2(交互题,暂时无法评测)

题目背景

在成功研究有毒细菌后,兔子本森退休了。外星人詹姆斯接管了他的实验室,并发现了一种新型细菌。 詹姆斯拥有 $n$ 种细菌,编号为 $0$ 到 $n-1$。每种细菌属于以下两类之一:**普通**或**有毒**。其中有 $t$ 种是有毒的,且保证 $1 \leq t < n$,即至少有一种有毒和一种普通细菌。 詹姆斯希望确定每种细菌的类型。为此,他购买了一台新机器,可以同时处理最多 $1000$ 个细菌样本。每个样本由单一细菌组成,允许多个样本为同一细菌。 机器运行多个迭代。在每次迭代中,任何与有毒细菌样本相邻的普通细菌样本都会死亡。机器随后将存活的细菌样本移至前方,形成新的序列。 机器将持续运行,直到下一次迭代的存活细菌数量与当前相同为止。即使在第一次迭代中没有细菌死亡,机器也会运行至少一次。 机器会报告每次迭代后存活的细菌样本数量。每次使用机器被视为一次查询。由于时间有限,詹姆斯最多只能使用机器 $1000$ 次。请帮助詹姆斯确定每种细菌的类型。

题目描述

您需要实现以下函数: ```cpp void determine_type(int n); ``` 该函数将被调用一次,参数 $n$ 表示细菌种类的数量。 您可以调用以下评测器提供的函数: ```cpp std::vector query_machine(std::vector samples); void answer_type(std::vector v); ``` - `query_machine`:接受一个整数向量 `samples`,表示放入机器的细菌样本序列。返回一个整数向量,表示每次迭代后存活的细菌样本数量。 - `answer_type`:接受一个字符向量 `v`,表示每种细菌的类型。 注意事项: - `query_machine` 每次调用的 `samples` 长度不能超过 $1000$。 - `query_machine` 最多可调用 $1000$ 次。 - `answer_type` 必须在 `determine_type` 函数结束前调用,且只能调用一次。

输入格式

- 输入包含一个整数 $n$,表示细菌种类的数量。

输出格式

- 输出一个长度为 $n$ 的字符串,其中第 $i$ 个字符表示第 $i$ 种细菌的类型:'R' 表示普通,'T' 表示有毒。

说明/提示

【样例解释】 假设细菌类型如下: - 细菌 $0$:有毒 - 细菌 $1$:普通 - 细菌 $2$:普通 交互过程: 1. 调用 `query_machine({1, 0, 2, 1})`: - 初始序列:$[1, 0, 2, 1]$ - 第一次迭代:细菌 $1$ 和 $2$ 死亡,剩余:$[0, 1]$,存活数量为 $2$ - 第二次迭代:细菌 $1$ 死亡,剩余:$[0]$,存活数量为 $1$ - 返回:$[2, 1]$ 2. 调用 `query_machine({1, 0, 1, 0, 0})`: - 初始序列:$[1, 0, 1, 0, 0]$ - 第一次迭代:细菌 $1$ 死亡,剩余:$[0, 0, 0]$,存活数量为 $3$ - 返回:$[3]$ 3. 调用 `query_machine({2, 1})`: - 初始序列:$[2, 1]$ - 第一次迭代:无细菌死亡,存活数量为 $2$ - 返回:$[2]$ 根据以上信息,可以确定细菌类型为: - 细菌 $0$:有毒 - 细菌 $1$:普通 - 细菌 $2$:普通 因此,调用 `answer_type({'T', 'R', 'R'})`。 【数据范围】 - $1 \leq n \leq 1000$ - 至少存在一种有毒和一种普通细菌。 | 子任务编号 | 分值 | 限制条件 | |:---:|:---:|:---:| | $0$ | $0$ | 样例测试用例 | | $1$ | $10$ | 细菌 $0$ 为有毒 | | $2$ | $90$ | 无额外限制 | 【评分标准】 - 子任务2为部分评分子任务。得分取决于在该子任务中所有测试用例的查询次数总和,记为 $q$。 - 如果 $q > 1000$,得分为 $0$。 - 如果 $21 < q \leq 1000$,得分为 $90 \times \sqrt{\frac{21}{q}}$。 - 如果 $q \leq 21$,得分为 $90$。