专栏文章

题解:P14590 计组实验

P14590题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@min1wsxb
此快照首次捕获于
2025/12/01 19:13
3 个月前
此快照最后确认于
2025/12/01 19:13
3 个月前
查看原文
显然模拟。
首先,既然要打印学生名单,就要先找到能存下学号及其对应实验的数据结构。
不难想到使用 vector 可以实现。
具体的,我们可以定义这样一个如下的 vector 数组:
CPP
vector<int> Class[300005];
Class[i] 就代表了选择第 ii 个实验的名单,Class[i][j] 则代表选择第 ii 个实验的第 j1j-1 号学生。
注意:因为 vector 的下标从 0 开始,所以 Class[i][j] 代表选择第 ii 个实验的第 j1j-1 号学生而不是第 jj 号。
然后,就是依照题意模拟了。这里没什么好讲的,细节刚刚已经提到过了。(如果你觉得你已经注意到了上述要点,那么你不妨看看输出格式)
AC 代码:
CPP
#include <bits/stdc++.h>
using namespace std;
vector<int> Class[300005];
int main() {
    int n, m;
    cin >> n >> m;
    while (m--) {
        int opt;
        cin >> opt;
        if (opt == 1) {
            int i1, x;
            cin >> i1 >> x;
            Class[i1].push_back(x);
        } else {
            int i1, j1, i2, j2;
            cin >> i1 >> j1 >> i2 >> j2;
            swap(Class[i1][j1 - 1], Class[i2][j2 - 1]);
        }
    }
    for (int i = 1; i <= n; i++) {
        cout << Class[i].size() << ' ';
        for (int j : Class[i]) {
            cout << j << ' ';
        }
        cout << '\n';
    }
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...