排队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 #include

using namespace std;

int main() { // 读入数据 int n, m; cin >> n >> m; // 初始化队伍,每个同学独立为一队 vector<vector> teams(n); for (int i = 0; i < n; i++) { teams[i].push_back(i+1); }

// 执行命令
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;

}

排队2 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/qyFt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录