#6878. B2. STL Queue(STL 队列)
B2. STL Queue(STL 队列)
NZIC 2026 Round 1(新西兰信息学竞赛 2026 第二轮)
STL Queue(STL 队列)
输入: 标准输入(stdin) 输出: 标准输出(stdout) 内存限制: 256 MB 时间限制: 1.0 秒
- problem statement
- submit
- submissions
题目描述
你是三明治连锁巨头 Sourdough Toasties & Lattes(STL) 的老板。
你正准备开门营业,却发现店外已经有:
名顾客在排队,等待购买三明治。
不过,不同顾客拥有不同的会员等级。
一共有三种会员等级:
- Bronze(青铜)
- Silver(白银)
- Gold(黄金)
其中:
Bronze 是最低等级,Gold 是最高等级。
会员等级最大的福利就是:
等级越高,越早吃到东西。
也就是说,如果顾客 A 的会员等级高于顾客 B,那么:
顾客 A 应该在顾客 B 之前被服务。
但是,如果两名顾客的会员等级相同,那么:
原本排队位置更靠前的人应该先被服务。
现在给出队伍中每个人的会员等级,请你确定:
应该按照什么顺序为这些顾客服务?
输入格式
第一行包含一个整数:
N
表示正在排队等待的顾客数量。
接下来的 (N) 行,每行包含一名顾客的会员等级。
其中,第 (i) 行表示:
当前排在第 (i) 个位置的顾客的会员等级。
会员等级一定是下面三种之一:
B
S
G
分别表示:
B = Bronze
S = Silver
G = Gold
输出格式
假设所有顾客按照其原本在队伍中的位置编号为:
请按照实际应该服务的顺序输出这些顾客的编号。
每行输出一个编号。
数据范围
子任务
- 子任务 1(+15%):
- 子任务 2(+27%):
每个人的会员等级都只可能是:
Silver
或者:
Gold
- 子任务 3(+58%):
没有额外限制。
样例说明
样例 1
第一个样例中,一共有 3 个人正在排队。
他们的情况分别为:
- 第 1 个人:Silver(白银会员)
- 第 2 个人:Bronze(青铜会员)
- 第 3 个人:Gold(黄金会员)
我们需要按照会员等级从高到低进行服务:
Gold
Silver
Bronze
因此:
- 先服务第 3 个人;
- 再服务第 1 个人;
- 最后服务第 2 个人。
所以输出顺序为:
3
1
2
样例 2
第二个样例中,一共有 6 个人正在排队。
他们按照原始排队顺序的会员等级分别是:
Bronze
Gold
Bronze
Silver
Silver
Gold
也就是:
1:B
2:G
3:B
4:S
5:S
6:G
首先应该服务 Gold 会员:
2
6
然后服务 Silver 会员:
4
5
最后服务 Bronze 会员:
1
3
需要注意:
第 2 个人和第 6 个人虽然都是 Gold 会员,但第 2 个人原本在队伍中更靠前,所以第 2 个人先被服务。
最终服务顺序为:
2
6
4
5
1
3
样例输入 1
3
S
B
G
样例输出 1
3
1
2
样例输入 2
6
B
G
B
S
S
G
样例输出 2
2
6
4
5
1
3
| 测试点编号 | N | 层级 | 特殊性质与覆盖点 |
|---|---|---|---|
| 1 | 1 | 弱数据 | 仅有一个 G |
| 2 | 仅有一个 S |
||
| 3 | 仅有一个 B |
||
| 4 | 6 | 基础数据 | 全部为 G,另外两个队列为空 |
| 5 | 7 | 全部为 S,首尾队列为空 |
|
| 6 | 8 | 全部为 B,前两个队列为空 |
|
| 7 | 9 | 正常数据 | 按 B、S、G 逆优先级分块,检查重新排序 |
| 8 | 12 | G、S、B 周期交替,检查队列稳定性 |
|
| 9 | 20 | 三种等级不规则混合、数量不均衡 | |
| 10 | 100 | 较大数据 | 三种等级密集混合,检查较长输入和完整输出 |