Problem p02692 (C++) — buggy submission, verdict: Runtime Error

/**
 *    author:   K.R.Surrya
 *    created:  04/05/2020 00:00:36
 **/
#include <bits/stdc++.h>
#define vi vector<int>
#define vii vector<vector<int>>
#define vpi vector<pair<int, int>>
#define rep(i, begin, end)                                                     \\
  for (__typeof(end) i = (begin) - ((begin) > (end));                          \\
       i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define pb push_back
using namespace std;

#define error(args...)                                                         \\
  {                                                                            \\
    string _s = #args;                                                         \\
    replace(_s.begin(), _s.end(), ',', ' ');                                   \\
    stringstream _ss(_s);                                                      \\
    istream_iterator<string> _it(_ss);                                         \\
    err(_it, args);                                                            \\
  }
void err(istream_iterator<string> it) { return; }
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  err(++it, args...); // args is going to end.
}

long long getVal(vector<long long> &seq, char x) { // int would have done;
  if (x == 'A') {
    return seq[0];
  } else if (x == 'B') {
    return seq[1];
  } else {
    return seq[2];
  }
}

bool check(vector<long long> &sequence) {
  for (auto x : sequence) {
    if (x < 0) {
      return false;
    }
  }
  return true;
}
void try1() {
  int N;
  cin >> N;
  long long A, B, C;
  vector<long long> sequence(3);
  for (int i = 0; i < 3; ++i)
    cin >> sequence[i];
  map<char, int> m;
  m['A'] = 0;
  m['B'] = 1;
  m['C'] = 2;
  string ret = ""; /*answer*/
  vector<string> ques;
  while (N--) {
    string curr;
    cin >> curr;
    ques.push_back(curr);
  }
  /*map<int,vector<int>> m1;
  vector<int> temp(3,0);
  string last=ques[ques.size()-1];
  for(int i=0;i<last.size();++i) {
      char curr=last[i];
      ++temp[m[curr]];
  }
  m1[ques.size()-1]=(temp);
  m1[ques.size()]={0,0,0};
  for(int i=ques.size()-1;i>=0;--i) {
     vector<int> temp=m1[i+1];
     string curr=ques[i];
     for(int j=0;j<curr.size();++j)  ++temp[m[curr[j]]];
     m1[i]=temp;
  }*/
  for (int i = 0; i < ques.size(); ++i) {
    string curr = ques[i];
    char one = curr[0];
    char two = curr[1];

    long long o = getVal(sequence, one);
    long long t = getVal(sequence, two);

    if (o >= t) {
      if (o == t) {
        if (i == ques.size() - 1) {
          ++sequence[m[one]];
          --sequence[m[two]];
          ret += string(1, one);
          // any of the two would have worked;;
        } else {
          bool save = false; // checking for the first character;
          for (auto ch : ques[i + 1]) {
            if (ch == one) {
              save = true;
              break;
            }
          }
          if (save) {
            ++sequence[m[one]];
            --sequence[m[two]];
            ret += string(1, one);
          } else {
            ++sequence[m[two]]; // this character will definitely be present.
            --sequence[m[one]];
            ret += string(1, two);
          }
        }
        if (!check(sequence)) {
          cout << "No" << '\\n';
          return;
        }

        continue;
      } // end..

      --sequence[m[one]];
      ++sequence[m[two]];
      ret += string(1, two); /**/
    } else if (t > o) {
      --sequence[m[two]];
      ++sequence[m[one]]; /**/
      ret += string(1, one);
    }
    /* else {
        int oc=m1[i+1][m[one]];
        int tc=m1[i+1][m[two]];
        if(oc>=tc) {
            ++sequence[m[two]];
            --sequence[m[one]];
            ret+=string(1,two);
        } else if(tc>oc) {
            ++sequence[m[one]];
            --sequence[m[two]];
            ret+=string(1,one);
        }
    } */
    if (!check(sequence)) {
      cout << "No" << '\\n';
      return;
    }
  }

  bool ok = true;
  for (int i = 0; i < 3; ++i) {
    if (sequence[i] < 0) {
      ok = false;
      break;
    }
  }

  if (!ok) {
    cout << "No" << '\\n';
    return;
  }

  cout << "Yes" << '\\n';
  for (auto c : ret) {
    cout << c << '\\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  // freopen("input.txt", "r", stdin);
  // freopen("output.txt", "w", stdout);

  auto start = chrono::high_resolution_clock::now();
  try1();
  auto end = chrono::high_resolution_clock::now();

  cerr << " Execution time : "
       << chrono::duration_cast<chrono::milliseconds>(end - start).count()
       << "ms" << endl;

  return 0;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int, int> ii;
#define F first
#define S second
#define sqr(x) (x) * (x)
#define pb(x) push_back(x)
#define sz(x) (int)x.size()
#define mp(x, y) make_pair(x, y)
#define all(x) (x).begin(), (x).end()
#define rep(i, x, y) for (int i = x; i < (y); ++i)
#define IOS                                                                    \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0)
/* start */

signed main() {
  IOS;
  map<char, int> m;
  int q, a, b, c;
  cin >> q >> a >> b >> c;
  m['A'] = a;
  m['B'] = b;
  m['C'] = c;
  vector<string> v(q);
  rep(i, 0, q) cin >> v[i];
  string ans = "";
  rep(i, 0, q) {
    int x = m[v[i][0]], y = m[v[i][1]];
    if (x == 0 and y == 0) {
      cout << "No\\n";
      return 0;
    } else if (x == 0) {
      m[v[i][0]]++;
      m[v[i][1]]--;
      ans += v[i][0];
    } else if (y == 0) {
      m[v[i][0]]--;
      m[v[i][1]]++;
      ans += v[i][1];
    }
    //   else if (i == q-1){
    //      ans+=v[i][0];
    //   }
    else if (v[i][0] == v[i + 1][0] or v[i][0] == v[i + 1][1]) {
      m[v[i][0]]++;
      m[v[i][1]]--;
      ans += v[i][0];
    } else {
      m[v[i][0]]--;
      m[v[i][1]]++;
      ans += v[i][1];
    }
    // cout << m['A'] << " " << m['B'] << " " << m['C'] << "\\n";
  }
  cout << "Yes\\n";
  rep(i, 0, q) { cout << ans[i] << "\\n"; }
}