1 条题解

  • 0
    @ 2026-9-30 12:43:55

    C++ :

    
    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    /* op1/op2 只让「被移动」的巧克力耐久 -1;op3 让整个盒子的巧克力耐久 -1。
       每次操作后把耐久为 0 的巧克力删掉。n,m<=1000, ci<=1000。 */
    static vector<int> box[1005];
    static void clean(vector<int> &v){
        vector<int>::iterator e = remove(v.begin(), v.end(), 0);
        v.erase(e, v.end());
    }
    int main(){
        int n, m;
        if(scanf("%d %d", &n, &m) != 2) return 0;
        for(int i = 1; i <= n; i++){
            int c;
            if(scanf("%d", &c) != 1) return 0;
            box[i].clear();
            for(int j = 0; j < c; j++){ int d; scanf("%d", &d); box[i].push_back(d); }
        }
        for(int t = 0; t < m; t++){
            int op;
            if(scanf("%d", &op) != 1) break;
            if(op == 1 || op == 2){
                int x, y;
                scanf("%d %d", &x, &y);
                int sz = (int)box[x].size();
                if(op == 1)
                    for(int j = 0; j < sz; j++) box[y].push_back(box[x][j] - 1);
                else
                    for(int j = sz - 1; j >= 0; j--) box[y].push_back(box[x][j] - 1);
                box[x].clear();
                clean(box[y]);
            } else {
                int x;
                scanf("%d", &x);
                for(size_t j = 0; j < box[x].size(); j++) box[x][j]--;
                clean(box[x]);
                reverse(box[x].begin(), box[x].end());
            }
        }
        for(int i = 1; i <= n; i++){
            printf("%d", (int)box[i].size());
            for(size_t j = 0; j < box[i].size(); j++) printf(" %d", box[i][j]);
            putchar('\n');
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    2679
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者