2339. 排队问题

1000ms 256MB 简单 队列
题目描述
有 $n$ 个人排队,每个人有一个唯一编号。所有人从左往右进行 `1, 2, 1, 2, ...` 循环报数。 - 报到 `1` 的人出队。 - 报到 `2` 的人立即站到队伍的最右端(队尾)。 - 报数过程反复进行,直到所有人出列为止。 已知 $n$ 个人原来的排队顺序,请写出他们的出列顺序。
输入格式
- 第一行为一个正整数 $n$ ($n \le 100$)。 - 第二行为 $n$ 个互不重复的正整数,表示他们初始排队时的编号 $i$ ($1 \le i \le n$)。
输出格式
- 输出一行,为他们出列的编号序列,数字之间用一个空格隔开。
样例 1
输入 (Input)
8
1 2 3 4 5 6 7 8
输出 (Output)
1 3 5 7 2 6 4 8
样例 2
输入 (Input)
4
2 5 1 3
输出 (Output)
2 1 5 3
样例说明
- 对于所有数据:$n \le 100$,编号在 $1 \sim 1000$ 范围内且不重复。 - **样例 2 说明**: 初始队列:`[2, 5, 1, 3]` 1. 队首 `2` 报数 1:出队,输出 `2`。当前队列:`[5, 1, 3]` 2. 队首 `5` 报数 2:移到队尾。当前队列:`[1, 3, 5]` 3. 队首 `1` 报数 1:出队,输出 `1`。当前队列:`[3, 5]` 4. 队首 `3` 报数 2:移到队尾。当前队列:`[5, 3]` 5. 队首 `5` 报数 1:出队,输出 `5`。当前队列:`[3]` 6. 队首 `3` 报数 2:移到队尾。当前队列:`[3]` 7. 队首 `3` 报数 1:出队,输出 `3`。队列空。 最终输出:`2 1 5 3`。
- **算法提示**: 这是一个典型的**队列模拟**问题。 可以使用 `std::queue` 存储排队编号。用一个布尔变量 `is_one` 记录当前应该报 1 还是 2(每次操作后取反): - 当 `is_one` 为 `true` 时,弹出队首并输出。 - 当 `is_one` 为 `false` 时,弹出队首并重新将其压入队尾。
自测终端 stdin → stdout
输入 stdin
CtrlShiftEnter
输出 stdout

                
错误 stderr

                
CtrlEnter提交
自动保存已开启
操作成功
wzs_oj@kernel:~ — wzs-sh
guest@wzsoj:~$
刷新页面 F5
复制 Ctrl+C
粘贴 Ctrl+V
搜索题目
站点公告
今日神谕
CSP 倒计时
排行榜
我的提交
Esc 关闭 Enter 跳转 支持模糊匹配数字