Please help with my solution.

Revision en2, by Arcer, 2026-01-26 11:26:36

I was trying 1692E - Binary Deque using C++, I am getting WA on test 2. Submission: 359959283

Logic: I have stored the amount of operations it would take to remove the '1' on every index from left end of the array in one vector v1 and from the right side of the array in another vector v2. Then I have calculated the number of '1's to be removed in d. I iterated till d = 0 to get the nearest '1' from each end of the vector by using f and b to store the amount of elements removed already from left and right side of the vector respectively. While iterating, I have added the least amount of operations from each end to r and at last, printed r.

Please tell me what is wrong with the logic and the code

Code:

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, s;
    cin >> n >> s;
    vector<int> v1, v2;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        if (a == 1) {
            v1.push_back(i + 1);
            v2.push_back(n - i);
        }
    }
    int d = v1.size() - s, r = 0, f = 0, b = 0;
    if (d < 0) cout << -1 << endl;
    else {
        while (d != 0) {
            if (v1[0] - f < v2[v2.size() - 1] - b) {
                r += v1[0] - f;
                f = v1[0];
                v1.erase(v1.begin());
                v2.erase(v2.begin());
            } else {
                r += v2[v2.size() - 1] - b;
                b = v2[v2.size() - 1];
                v1.pop_back();
                v2.pop_back();
            }
            d--;
        }
        cout << r << endl;
    }
}

int main() {
    int t = 1;
    cin >> t;
    while (t--) solve();
}

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English Arcer 2026-01-26 11:26:36 0 (published)
en1 English Arcer 2026-01-26 11:25:53 1742 Initial revision (saved to drafts)