排队2 - C++ 代码实现
排队2 - C++ 代码实现
题目描述
现在有 $n$ 个小朋友(编号依次为 $1, 2, \cdots, n$)要排队,一开始他们各自为一队,接下来,老师会发布 $m$ ($\le 1000$)条命令,每条命令给出两个同学的编号 $i, j, a$,表示让 $j$ 同学以及他后面 $a$ 个同学保持原来的顺序不变,一起排到 $i$ 同学后面。如果 $j$ 同学后面不足 $a$ 个学生,则让 $j$ 同学以及他后面的所有同学保持原来的顺序不变,一起排到 $i$ 同学后面。 输出完成老师的 $m$ 条指令以后,还剩下多少列队伍,并按照队首同学编号从小到大的顺序输出每个队伍,输出一个队伍时,按照从前到后的顺序输出队伍中每个同学的编号。
输入格式
从标准输入读入数据。 第一行,两个整数 $n,m$($1\le n,m \le 1000$)。 接下来 $m$ 行,每行三个整数 $i,j,a$ ($1 \le i,j \le n$,$i \ne j$,保证 $i$ 不在 $j$ 的后面 $a$ 个同学中,$0 \le a < n$),含义题目描述所示。
输出格式
输出到标准输出。 输出若干行。 第一行,一个整数 $k$ ,表示执行完操作后的队伍数量。 接下来 $k$ 行,按照队首同学编号从小到大的顺序输出每个队伍。每行输出一个队伍,输出一个队伍时,按照从前到后的顺序输出队伍中每个同学的编号。
样例 #1
样例输入 #1
5 5
5 2 2
1 2 4
5 3 1
1 2 2
5 1 2
样例输出 #1
2
4
5 1 2 3
样例 #2
样例输入 #2
10 10
1 5 0
2 1 1
2 3 0
3 4 0
8 10 0
1 2 2
4 2 1
1 3 1
4 7 0
3 4 2
样例输出 #2
4
1 3 4 7 2 5
6
8 10
9
写出一个正确的C++代码内容:```cpp
#include
using namespace std;
int main() {
// 读入数据
int n, m;
cin >> n >> m;
// 初始化队伍,每个同学独立为一队
vector<vector
// 执行命令
for (int i = 0; i < m; i++) {
int x, y, a;
cin >> x >> y >> a;
// 找到队伍中的位置
int x_idx, y_idx;
for (int j = 0; j < teams.size(); j++) {
if (teams[j][0] == x) {
x_idx = j;
}
if (teams[j][0] == y) {
y_idx = j;
}
}
// 将y同学及其后面的a个同学从y的队伍中分离出来
vector<int> temp;
for (int j = 0; j <= a && j < teams[y_idx].size() - 1; j++) {
temp.push_back(teams[y_idx].back());
teams[y_idx].pop_back();
}
// 将temp中的同学插入到x的队伍中
for (int j = temp.size() - 1; j >= 0; j--) {
teams[x_idx].push_back(temp[j]);
}
}
// 输出结果
cout << teams.size() << endl;
for (int i = 0; i < teams.size(); i++) {
for (int j = 0; j < teams[i].size(); j++) {
cout << teams[i][j] << " ";
}
cout << endl;
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/qyFt 著作权归作者所有。请勿转载和采集!