我这方法太蠢了,入门级不至于到这种程度吧,而且还超时(
查看原帖
我这方法太蠢了,入门级不至于到这种程度吧,而且还超时(
1451420
ALZ233楼主2024/10/27 10:15
#include <iostream>
#include <vector>
using namespace std;

pair<int, vector<int>> maxDiffWithArray(const vector<int>& arr) {
    int n = arr.size();
    int zeroCount = 0;
    for (int num : arr) {
        if (num == 0) zeroCount++;
    }
    int maxValue = -1;
    vector<int> bestArray;
    for (int i = 0; i < n; ++i) {
        int leftOne = 0;
        int rightOne = 0;
        int middleZero = 0;
        for (int j = 0; j < i; ++j) {
            if (arr[j] == 1) leftOne++;
        }
        for (int j = i; j < n; ++j) {
            if (arr[j] == 1) rightOne++;
            else middleZero++;
        }
        int x = min(middleZero, zeroCount);
        int y = leftOne + rightOne + x;
        int diff = y - x;
        if (diff > maxValue) {
            maxValue = diff;
            vector<int> newArray(arr.begin(), arr.begin() + i);
            int remainingZero = x;
            for (int j = i; j < n; ++j) {
                if (arr[j] == 1 || remainingZero == 0) {
                    newArray.push_back(arr[j]);
                } else {
                    newArray.push_back(1);
                    remainingZero--;
                }
            }
            bestArray = newArray;
        }
    }
    return make_pair(maxValue, bestArray);
}

int main() {
    int T;
    cin >> T;
    vector<pair<int, vector<int>>> results;
    while (T--) {
        int n;
        cin >> n;
        vector<int> arr(n);
        for (int i = 0; i < n; ++i) {
            cin >> arr[i];
        }
        results.push_back(maxDiffWithArray(arr));
    }
    for (const auto& result : results) {
        cout << result.first << endl;
        for (int num : result.second) {
            cout << num << " ";
        }
        cout << endl;
    }
    return 0;
}
2024/10/27 10:15
加载中...