CF45C Dancing Lessons

题目描述

有 $n$ 个人在参加舞蹈课程。每个人的舞蹈水平为 $a_{i}$。课程开始时,他们从左到右排成一行。只要队列中至少有一对男孩和女孩相邻,就重复以下过程:选出所有相邻的“男孩和女孩”对中,舞蹈水平差的绝对值最小的那一对开始跳舞。如果有若干对满足条件,优先选择最左边的那一对。每当一对跳舞离开后,所有人重新排列成连续的一行。舞蹈水平差指的是 $a_{i}$ 的绝对值之差。你的任务是,依次输出每一对跳舞的配对情况及顺序。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^{5}$),表示人数。 第二行包含长为 $n$ 的字符串,仅由 B 或 G 组成,用于表示每个人的性别(B 表示男生,G 表示女生),没有空格。 第三行包含 $n$ 个用空格分隔的整数 $a_{i}$($1 \leq a_{i} \leq 10^7$),表示舞蹈水平。排队顺序即为输入顺序。

输出格式

输出总共配对跳舞的对数 $k$。 随后输出 $k$ 行,每行包含两个整数,表示参与该对舞蹈的人的编号(编号从 $1$ 到 $n$,按最初排队顺序)。两个编号需从小到大排列。配对顺序即为他们依次跳舞的顺序。

说明/提示

由 ChatGPT 5 翻译