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$。