Nikita and the Game

  • + 0 comments

    include

    include

    include

    include

    using namespace std; int arraySplittingHelper(const vector& arr, int start, int end, const vector& prefixSum) { if (start >= end) return 0;

    long long total_sum = prefixSum[end + 1] - prefixSum[start];
    if (total_sum % 2 != 0) return 0;
    
    long long target_sum = total_sum / 2;
    for (int i = start; i < end; ++i) {
        long long left_sum = prefixSum[i + 1] - prefixSum[start];
        if (left_sum == target_sum) {
            // Recursively calculate splits for left and right partitions
            return 1 + max(
                arraySplittingHelper(arr, start, i, prefixSum),
                arraySplittingHelper(arr, i + 1, end, prefixSum)
            );
        }
    }
    
    return 0;
    

    }

    int arraySplitting(const vector& arr) { int n = arr.size(); // Create prefix sum array vector prefixSum(n + 1, 0); for (int i = 0; i < n; ++i) { prefixSum[i + 1] = prefixSum[i] + arr[i]; } return arraySplittingHelper(arr, 0, n - 1, prefixSum); } int main() { int t; cin >> t; vector results;

    while (t--) {
        int n;
        cin >> n;
        vector<int> arr(n);
        for (int i = 0; i < n; ++i) {
            cin >> arr[i];
        }
        results.push_back(arraySplitting(arr));
    }
    
    for (int result : results) {
        cout << result << endl;
    }
    
    return 0;
    

    }