#include<iostream>
    #include<string>
    #include<sstream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    void dfs(vector<int>& curcpu, vector<vector<int>>& res, vector<int>& path, int start, int target) {
        if (path.size() == target) {
            res.push_back(path);
            return;
        }
        for (int i = start; i < curcpu.size(); i++) {
            path.push_back(curcpu[i]);
            dfs(curcpu, res, path, i+1, target);
            path.pop_back();
        }
    }
    int main() {
        vector<int> arr;
        string s;
        getline(cin,s);
        stringstream ss(s.substr(1,s.size()-2));
        string t;
        while (getline(ss, t, ',')) {
            int num = stoi(t);
            arr.push_back(num);
        }

        int n;
        cin >> n;

        vector<vector<int>> res;
        if (arr.size() < n) return 0;
        sort(arr.begin(), arr.end());
        vector<vector<int>> cpu(2);
        int arr0 = 0;//两个链路中处理器数量
        int arr1 = 0;
        for (int a : arr) {
            if (a < 4) {
                cpu[0].push_back(a);
                arr0++;
            }
            else {
                cpu[1].push_back(a);
                arr1++;
            }
        }
        if (n == 1) {//1,3,2,4
            if (arr0 == 1 || arr1 == 1) {//链路一/二只有一个可选,不用dfs
                if (arr0 == 1) {
                    vector<int> path;
                    path.push_back(cpu[0][0]);
                    res.push_back(path);
                }
                if (arr1 == 1) {
                    vector<int> path;
                    path.push_back(cpu[1][0]);
                    res.push_back(path);
                }
            }else if (arr0 == 3 || arr1 == 3) {//链路一/二,3个选一个,用dfs
                if (arr0 == 3) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 1);
                }
                if (arr1 == 3) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 1);
                }
            }
            else if (arr0 == 2 || arr1 == 2) {
                if (arr0 == 2) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 1);
                }
                if (arr1 == 2) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 1);
                }
            }
            else if (arr0 == 4 || arr1 == 4) {
                if (arr0 == 4) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 1);
                }
                if (arr1 == 4) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 1);
                }
            }
        }
        else if(n==2){//2,4,3
            if (arr0 == 2 || arr1 == 2) {
                if (arr0 == 2) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 2);
                }
                if (arr1 == 2) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 2);
                }
            }
            else if (arr0 == 4 || arr1 == 4) {
                if (arr0 == 4) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 2);
                }
                if (arr1 == 4) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 2);
                }
            }else if (arr0 == 3 || arr1 == 3) {
                if (arr0 == 3) {
                    vector<int> path;
                    dfs(cpu[0], res, path, 0, 2);
                }
                if (arr1 == 3) {
                    vector<int> path;
                    dfs(cpu[1], res, path, 0, 2);
                }
            }
        }
        else if (n == 4) {
            if (arr0 == 4 || arr1 == 4) {
                if (arr0 == 4) {
                    res.push_back(cpu[0]);
                }
                if (arr1 == 4) {
                    res.push_back(cpu[1]);
                }
            }
        }
        else if (n == 8) {
            if (arr0 == 4 && arr1 == 4) {
                cpu[0].insert(cpu[0].end(),cpu[1].begin(),cpu[1].end());
                res.push_back(cpu[0]);
            }
        }
        for (int i = 0; i < res.size(); i++) {
            if(i==0) cout << '[';
            for (int j = 0; j < res[i].size(); j++) {
                if (j == 0) {
                    cout << '[';
                }
                cout << res[i][j];
                if (j != res[i].size() - 1) {
                    cout << ',' << ' ';
                }
                else {
                    cout << ']';
                }
            }
            if (i != res.size() - 1) {
                cout << ','<<' ';
            }
            else {
                cout << ']';
            }
        }
        return 0;
    }

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐