Problem p03049 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define REP(i, n) for (int i = 0; i < int(n); i++)
#define FOR(i, m, n) for (int i = int(m); i < int(n); i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define VI vector<int>
#define VLL vector<long long>
#define VVI vector<vector<int>>
#define VVLL vector<vector<long long>>
#define VC vector<char>
#define VS vector<string>
#define VVC vector<vector<char>>
#define VB vector<bool>
#define fore(i, a) for (auto &i : a)

typedef pair<int, int> P;
template <class T> bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
const int INF = 1 << 30;
const ll INFL = 1LL << 60;
const ll mod = 1000000007;

int main() {

  int n;
  cin >> n;
  int a = 0, b = 0;
  int c = 0, d = 0;
  int e = 0;

  int ans = 0;
  REP(i, n) {
    string s;
    cin >> s;
    REP(j, s.size() - 1) {
      if (s.substr(j, 2) == "AB") {
        ans++;
        j++;
      }
    }

    if (s[0] == 'B' && s[s.size() - 1] == 'A')
      e++;
    else if (s[s.size() - 1] == 'A')
      a++;
    else if (s[0] == 'B')
      b++;
  }

  // cout << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << endl;

  ans += max(0, e - 1);

  if (e > 0 && a == b) {
    assert(n == 0);
    cout << ans + a << endl;
    return 0;
  } else {
    if (e == 0)
      cout << ans + min(a, b) << endl;
    else
      cout << ans + min(a, b) + 1 << endl;

    return 0;
  }
}


Fixed submission:
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
#define REP(i, n) for (int i = 0; i < int(n); i++)
#define FOR(i, m, n) for (int i = int(m); i < int(n); i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define VI vector<int>
#define VLL vector<long long>
#define VVI vector<vector<int>>
#define VVLL vector<vector<long long>>
#define VC vector<char>
#define VS vector<string>
#define VVC vector<vector<char>>
#define VB vector<bool>
#define fore(i, a) for (auto &i : a)

typedef pair<int, int> P;
template <class T> bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
const int INF = 1 << 30;
const ll INFL = 1LL << 60;
const ll mod = 1000000007;

int main() {

  int n;
  cin >> n;
  int a = 0, b = 0;
  int c = 0, d = 0;
  int e = 0;

  int ans = 0;
  REP(i, n) {
    string s;
    cin >> s;
    REP(j, s.size() - 1) {
      if (s.substr(j, 2) == "AB") {
        ans++;
        j++;
      }
    }

    if (s[0] == 'B' && s[s.size() - 1] == 'A')
      e++;
    else if (s[s.size() - 1] == 'A')
      a++;
    else if (s[0] == 'B')
      b++;
  }

  // cout << a << ' ' << b << ' ' << c << ' ' << d << ' ' << e << endl;

  ans += max(0, e - 1);

  if (e > 0 && a == b) {
    if (a > 0) {
      cout << ans + a + 1 << endl;
    } else
      cout << ans + a << endl;
    return 0;
  } else {
    if (e == 0)
      cout << ans + min(a, b) << endl;
    else
      cout << ans + min(a, b) + 1 << endl;

    return 0;
  }
}