OI XX - baj (Alt2)

// https://szkopul.edu.pl/problemset/problem/3GXkVUEnWNZRn2C2VpX2uKmq/site/?key=statement

#include <bits/stdc++.h>

const int INF = 1e9;

int main() {
    int n;
    std::cin >> n;

    std::vector<int> x(n);
    for (int i = 0; i < n; i++) {
        std::cin >> x[i];
    }

    int dp[3] = {INF, INF, INF};

    dp[x[0] + 1] = 0;

    for (int i = 1; i < n; i++) {
        int next_dp[3] = {INF, INF, INF};

        if (dp[0] != INF) {
            next_dp[0] = dp[0] + (x[i] + 1);
        }

        if (x[i] >= 0 && dp[0] != INF) {
            next_dp[1] = std::min(next_dp[1], dp[0] + x[i]);
        }
        if (x[i] == 0 && dp[1] != INF) {
            next_dp[1] = std::min(next_dp[1], dp[1]);
        }

        if (x[i] == 1 && dp[0] != INF) {
            next_dp[2] = std::min(next_dp[2], dp[0]);
        }
        if (x[i] == 1 && dp[1] != INF) {
            next_dp[2] = std::min(next_dp[2], dp[1]);
        }
        if (dp[2] != INF) {
            next_dp[2] = std::min(next_dp[2], dp[2] + (1 - x[i]));
        }

        dp[0] = next_dp[0];
        dp[1] = next_dp[1];
        dp[2] = next_dp[2];
    }

    int ans = std::min({dp[0], dp[1], dp[2]});

    if (ans >= INF) {
        std::cout << "BRAK\n";
    } else {
        std::cout << ans << "\n";
    }

    return 0;
}