#6878. B2. STL Queue(STL 队列)

    ID: 6878 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数据结构队列NZIC 2026 Round 1(新西兰信息学竞赛 2026 第二轮)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) 的老板。

你正准备开门营业,却发现店外已经有:

NN

名顾客在排队,等待购买三明治。

不过,不同顾客拥有不同的会员等级。

一共有三种会员等级:

  • Bronze(青铜)
  • Silver(白银)
  • Gold(黄金)

其中:

Bronze 是最低等级,Gold 是最高等级。

会员等级最大的福利就是:

等级越高,越早吃到东西。

也就是说,如果顾客 A 的会员等级高于顾客 B,那么:

顾客 A 应该在顾客 B 之前被服务。

但是,如果两名顾客的会员等级相同,那么:

原本排队位置更靠前的人应该先被服务。

现在给出队伍中每个人的会员等级,请你确定:

应该按照什么顺序为这些顾客服务?


输入格式

第一行包含一个整数:

N

表示正在排队等待的顾客数量。

接下来的 (N) 行,每行包含一名顾客的会员等级。

其中,第 (i) 行表示:

当前排在第 (i) 个位置的顾客的会员等级。

会员等级一定是下面三种之一:

B
S
G

分别表示:

B = Bronze
S = Silver
G = Gold

输出格式

假设所有顾客按照其原本在队伍中的位置编号为:

1,2,,N1,2,\dots,N

请按照实际应该服务的顺序输出这些顾客的编号。

每行输出一个编号。


数据范围

1N1000001\le N\le100000

子任务

  • 子任务 1(+15%):
N3N\le3
  • 子任务 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 较大数据 三种等级密集混合,检查较长输入和完整输出