Problem p03741 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;

using pii = pair<int, int>;
using ll = long long;
#define rep(i, j) for (int i = 0; i < (int)(j); i++)
#define repeat(i, j, k) for (int i = (j); i < (int)(k); i++)
#define all(v) v.begin(), v.end()
#define debug(x) cerr << #x << " : " << x << endl

template <class T> bool set_min(T &a, const T &b) {
  return a > b ? a = b, true : false;
}
template <class T> bool set_max(T &a, const T &b) {
  return a < b ? a = b, true : false;
}
// vector
template <class T> istream &operator>>(istream &is, vector<T> &v) {
  for (T &a : v)
    is >> a;
  return is;
}
template <class T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const T &t : v)
    os << "\t" << t;
  return os << endl;
}
// pair
template <class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &v) {
  return os << "<" << v.first << ", " << v.second << ">";
}

const int INF = 1 << 30;
const ll INFL = 1LL << 60;

class Solver {
public:
  bool solve() {
    int N;
    cin >> N;
    vector<ll> A(N);
    cin >> A;
    ll ans = INFL;
    {
      ll sum = 0, cnt = 0;
      rep(i, N) {
        sum += A[i];
        if (i % 2 == 0 and sum <= 0) {
          cnt += abs(sum) + 1;
          sum = 1;
        } else if (i % 2 == 1 and sum >= 0) {
          cnt += abs(sum) + 1;
          sum = -1;
        }
      }
      set_min(ans, cnt);
    }
    rep(i, N) {
      ll sum = 0, cnt = 0;
      rep(i, N) {
        sum += A[i];
        if (i % 2 == 1 and sum <= 0) {
          cnt += abs(sum) + 1;
          sum = 1;
        } else if (i % 2 == 0 and sum >= 0) {
          cnt += abs(sum) + 1;
          sum = -1;
        }
      }
      set_min(ans, cnt);
    }
    cout << ans << endl;
    return 0;
  }
};

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  Solver s;
  s.solve();
  return 0;
}


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

using pii = pair<int, int>;
using ll = long long;
#define rep(i, j) for (int i = 0; i < (int)(j); i++)
#define repeat(i, j, k) for (int i = (j); i < (int)(k); i++)
#define all(v) v.begin(), v.end()
#define debug(x) cerr << #x << " : " << x << endl

template <class T> bool set_min(T &a, const T &b) {
  return a > b ? a = b, true : false;
}
template <class T> bool set_max(T &a, const T &b) {
  return a < b ? a = b, true : false;
}
// vector
template <class T> istream &operator>>(istream &is, vector<T> &v) {
  for (T &a : v)
    is >> a;
  return is;
}
template <class T> ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const T &t : v)
    os << "\t" << t;
  return os << endl;
}
// pair
template <class T, class U>
ostream &operator<<(ostream &os, const pair<T, U> &v) {
  return os << "<" << v.first << ", " << v.second << ">";
}

const int INF = 1 << 30;
const ll INFL = 1LL << 60;

class Solver {
public:
  bool solve() {
    int N;
    cin >> N;
    vector<ll> A(N);
    cin >> A;
    ll ans = INFL;
    {
      ll sum = 0, cnt = 0;
      rep(i, N) {
        sum += A[i];
        if (i % 2 == 0 and sum <= 0) {
          cnt += abs(sum) + 1;
          sum = 1;
        } else if (i % 2 == 1 and sum >= 0) {
          cnt += abs(sum) + 1;
          sum = -1;
        }
      }
      set_min(ans, cnt);
    }
    {
      ll sum = 0, cnt = 0;
      rep(i, N) {
        sum += A[i];
        if (i % 2 == 1 and sum <= 0) {
          cnt += abs(sum) + 1;
          sum = 1;
        } else if (i % 2 == 0 and sum >= 0) {
          cnt += abs(sum) + 1;
          sum = -1;
        }
      }
      set_min(ans, cnt);
    }
    cout << ans << endl;
    return 0;
  }
};

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  Solver s;
  s.solve();
  return 0;
}