Problem p02941 (C++)

Buggy submission (status: Time Limit Exceeded):
#define DEBUG 0

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

#if DEBUG
// basic debugging macros
int __i__, __j__;
#define printLine(l)                                                           \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << "-";                                                               \
  }                                                                            \
  cout << endl
#define printLine2(l, c)                                                       \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << c;                                                                 \
  }                                                                            \
  cout << endl
#define printVar(n) cout << #n << ": " << n << endl
#define printArr(a, l)                                                         \
  cout << #a << ": ";                                                          \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << a[__i__] << " ";                                                   \
  }                                                                            \
  cout << endl
#define print2dArr(a, r, c)                                                    \
  cout << #a << ":\n";                                                         \
  for (__i__ = 0; __i__ < r; __i__++) {                                        \
    for (__j__ = 0; __j__ < c; __j__++) {                                      \
      cout << a[__i__][__j__] << " ";                                          \
    }                                                                          \
    cout << endl;                                                              \
  }
#define print2dArr2(a, r, c, l)                                                \
  cout << #a << ":\n";                                                         \
  for (__i__ = 0; __i__ < r; __i__++) {                                        \
    for (__j__ = 0; __j__ < c; __j__++) {                                      \
      cout << setw(l) << setfill(' ') << a[__i__][__j__] << " ";               \
    }                                                                          \
    cout << endl;                                                              \
  }

// advanced debugging class
// debug 1,2,'A',"test";
class _Debug {
public:
  template <typename T> _Debug &operator,(T val) {
    cout << val << endl;
    return *this;
  }
};
#define debug _Debug(),
#else
#define printLine(l)
#define printLine2(l, c)
#define printVar(n)
#define printArr(a, l)
#define print2dArr(a, r, c)
#define print2dArr2(a, r, c, l)
#define debug
#endif

// define
#define MAX_VAL 999999999
#define MAX_VAL_2 999999999999999999LL
#define EPS 1e-6
#define mp make_pair
#define pb push_back

// typedef
typedef unsigned int UI;
typedef long long int LLI;
typedef unsigned long long int ULLI;
typedef unsigned short int US;
typedef pair<int, int> pii;
typedef pair<LLI, LLI> plli;
typedef vector<int> vi;
typedef vector<LLI> vlli;
typedef vector<pii> vpii;
typedef vector<plli> vplli;

// ---------- END OF TEMPLATE ----------

int A[200000], B[200000];
priority_queue<pii> H;
int main() {
  int i;
  int N, d = 0;
  scanf("%d", &N);
  for (i = 0; i < N; i++)
    scanf("%d", &A[i]);
  for (i = 0; i < N; i++)
    scanf("%d", &B[i]), H.push(mp(B[i], i)), d += (A[i] != B[i]);
  for (i = 0; i < N; i++) {
    if (B[i] < A[i]) {
      printf("-1\n");
      return 0;
    }
  }

  LLI ans = 0;
  while (d > 0) {
    if (H.empty()) {
      printf("-1\n");
      return 0;
    }
    int u = H.top().second;
    H.pop();
    if (B[u] == A[u])
      continue;
    int c = B[(u + N - 1) % N] + B[(u + 1) % N];
    if (c + A[u] > B[u])
      continue;
    d -= (B[u] != A[u]);
    ans += (B[u] - A[u]) / c;
    B[u] -= ((B[u] - A[u]) / c) * c;
    d += (B[u] != A[u]);
    H.push(mp(B[u], u));
  }
  printf("%lld\n", ans);

  return 0;
}


Fixed submission:
#define DEBUG 0

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

#if DEBUG
// basic debugging macros
int __i__, __j__;
#define printLine(l)                                                           \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << "-";                                                               \
  }                                                                            \
  cout << endl
#define printLine2(l, c)                                                       \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << c;                                                                 \
  }                                                                            \
  cout << endl
#define printVar(n) cout << #n << ": " << n << endl
#define printArr(a, l)                                                         \
  cout << #a << ": ";                                                          \
  for (__i__ = 0; __i__ < l; __i__++) {                                        \
    cout << a[__i__] << " ";                                                   \
  }                                                                            \
  cout << endl
#define print2dArr(a, r, c)                                                    \
  cout << #a << ":\n";                                                         \
  for (__i__ = 0; __i__ < r; __i__++) {                                        \
    for (__j__ = 0; __j__ < c; __j__++) {                                      \
      cout << a[__i__][__j__] << " ";                                          \
    }                                                                          \
    cout << endl;                                                              \
  }
#define print2dArr2(a, r, c, l)                                                \
  cout << #a << ":\n";                                                         \
  for (__i__ = 0; __i__ < r; __i__++) {                                        \
    for (__j__ = 0; __j__ < c; __j__++) {                                      \
      cout << setw(l) << setfill(' ') << a[__i__][__j__] << " ";               \
    }                                                                          \
    cout << endl;                                                              \
  }

// advanced debugging class
// debug 1,2,'A',"test";
class _Debug {
public:
  template <typename T> _Debug &operator,(T val) {
    cout << val << endl;
    return *this;
  }
};
#define debug _Debug(),
#else
#define printLine(l)
#define printLine2(l, c)
#define printVar(n)
#define printArr(a, l)
#define print2dArr(a, r, c)
#define print2dArr2(a, r, c, l)
#define debug
#endif

// define
#define MAX_VAL 999999999
#define MAX_VAL_2 999999999999999999LL
#define EPS 1e-6
#define mp make_pair
#define pb push_back

// typedef
typedef unsigned int UI;
typedef long long int LLI;
typedef unsigned long long int ULLI;
typedef unsigned short int US;
typedef pair<int, int> pii;
typedef pair<LLI, LLI> plli;
typedef vector<int> vi;
typedef vector<LLI> vlli;
typedef vector<pii> vpii;
typedef vector<plli> vplli;

// ---------- END OF TEMPLATE ----------

int A[200000], B[200000];
priority_queue<pii> H;
int main() {
  int i;
  int N, d = 0;
  scanf("%d", &N);
  for (i = 0; i < N; i++)
    scanf("%d", &A[i]);
  for (i = 0; i < N; i++)
    scanf("%d", &B[i]), H.push(mp(B[i], i)), d += (A[i] != B[i]);
  for (i = 0; i < N; i++) {
    if (B[i] < A[i]) {
      printf("-1\n");
      return 0;
    }
  }

  LLI ans = 0;
  while (d > 0) {
    if (H.empty()) {
      printf("-1\n");
      return 0;
    }
    int u = H.top().second;
    H.pop();
    if (B[u] == A[u])
      continue;
    int c = B[(u + N - 1) % N] + B[(u + 1) % N];
    if ((LLI)c + A[u] > B[u])
      continue;
    d -= (B[u] != A[u]);
    ans += (B[u] - A[u]) / c;
    B[u] -= ((B[u] - A[u]) / c) * c;
    d += (B[u] != A[u]);
    H.push(mp(B[u], u));
  }
  printf("%lld\n", ans);

  return 0;
}