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

#include <bits/stdc++.h>
using namespace std;
int const nax = 3e5 + 10;

int n, a, b, c;
string s[nax];
char ans[nax];
int main() {

  scanf("%d %d %d %d", &n, &a, &b, &c);

  for (int i = 1; i <= n; ++i) {
    static char buf[5];
    scanf("%s", buf);
    s[i] = string(buf);
  }

#define no return !printf("No")
  if (s[1] == "AB" && a + b == 0)
    no;
  else if (s[1] == "BC" && b + c == 0)
    no;
  else if (s[1] == "AC" && a + c == 0)
    no;

  if (a + b + c >= 3) {

    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (b >= a)
          ans[i] = 'A', ++a, --b;
        else
          ans[i] = 'B', ++b, --a;
      } else if (s[i] == "AC") {
        if (c >= a)
          ans[i] = 'A', ++a, --c;
        else
          ans[i] = 'C', ++c, --a;
      } else if (s[i] == "BC") {
        if (c >= b)
          ans[i] = 'B', ++b, --c;
        else
          ans[i] = 'C', --b, ++c;
      }
    }
  } else if (a + b + c == 2) {
    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (b > a)
          ans[i] = 'A', ++a, --b;
        else if (a > b)
          ans[i] = 'B', ++b, --a;
        else {
          if (i == n) {
            ans[i] = 'A', ++a, --b;
          } else {
            if (s[i + 1] == "AB")
              ans[i] = 'A', ++a, --b;
            else if (s[i + 1] == "AC")
              ans[i] = 'A', ++a, --b;
            else if (s[i + 1] == "BC")
              ans[i] = 'B', ++b, --a;
          }
        }
      } else if (s[i] == "BC") {
        if (b > c)
          ans[i] = 'C', ++c, --b;
        else if (c > b)
          ans[i] = 'B', --c, ++b;
        else {
          if (i == n) {
            ans[i] = 'B', ++b, --c;
          } else {
            if (s[i + 1] == "BC")
              ans[i] = 'C', ++c, --b;
            else if (s[i + 1] == "AB")
              ans[i] = 'B', ++b, --c;
            else if (s[i + 1] == "AC")
              ans[i] = 'C', ++c, --b;
          }
        }
      } else if (s[i] == "AC") {
        if (a > c)
          ans[i] = 'C', ++c, --a;
        else if (c > a)
          ans[i] = 'A', ++a, --c;
        else {
          if (i == n) {
            ans[i] = 'C', ++c, --a;
          } else {
            if (s[i + 1] == "AC")
              ans[i] = 'C', ++c, --a;
            else if (s[i + 1] == "AB")
              ans[i] = 'A', ++a, --c;
            else if (s[i + 1] == "BC")
              ans[i] = 'C', ++c, --a;
          }
        }

      } else
        throw;
    }

  } else if (a + b + c == 1) {
    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (a + b == 0)
          no;
        else if (b > 0)
          ans[i] = 'A', ++a, --b;
        else if (a > 0)
          ans[i] = 'B', ++b, --a;
        else
          assert(false);
      } else if (s[i] == "AC") {
        if (a + c == 0)
          no;
        else if (c > 0)
          ans[i] = 'A', ++a, --c;
        else if (a > 0)
          ans[i] = 'C', ++c, --a;
        else
          assert(false);
      } else if (s[i] == "BC") {
        if (b + c == 0)
          no;
        else if (b > 0)
          ans[i] = 'C', ++c, --b;
        else if (c > 0)
          ans[i] = 'B', ++b, --c;
        else
          assert(false);
      }
    }
  } else
    no;

  puts("Yes");

  for (int i = 1; i <= n; ++i) {
    putchar(ans[i]);
    puts("");
  }
}

/*
    Good Luck
        -Lucina
*/


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
int const nax = 3e5 + 10;

int n, a, b, c;
string s[nax];
char ans[nax];
int main() {

  scanf("%d %d %d %d", &n, &a, &b, &c);

  for (int i = 1; i <= n; ++i) {
    static char buf[5];
    scanf("%s", buf);
    s[i] = string(buf);
  }

#define no return !printf("no")
  if (s[1] == "AB" && a + b == 0)
    no;
  else if (s[1] == "BC" && b + c == 0)
    no;
  else if (s[1] == "AC" && a + c == 0)
    no;

  if (a + b + c >= 3) {

    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (b >= a)
          ans[i] = 'A', ++a, --b;
        else
          ans[i] = 'B', --b, ++a;
      } else if (s[i] == "AC") {
        if (c >= a)
          ans[i] = 'A', ++a, --c;
        else
          ans[i] = 'C', ++c, --a;
      } else if (s[i] == "BC") {
        if (c >= b)
          ans[i] = 'B', ++b, --c;
        else
          ans[i] = 'C', --b, ++c;
      }
    }
  } else if (a + b + c == 2) {
    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (b > a)
          ans[i] = 'A', ++a, --b;
        else if (a > b)
          ans[i] = 'B', ++b, --a;
        else {
          if (i == n) {
            ans[i] = 'A', ++a, --b;
          } else {
            if (s[i + 1] == "AB")
              ans[i] = 'A', ++a, --b;
            else if (s[i + 1] == "AC")
              ans[i] = 'A', ++a, --b;
            else if (s[i + 1] == "BC")
              ans[i] = 'B', ++b, --a;
          }
        }
      } else if (s[i] == "BC") {
        if (b > c)
          ans[i] = 'C', ++c, --b;
        else if (c > b)
          ans[i] = 'B', --c, ++b;
        else {
          if (i == n) {
            ans[i] = 'B', ++b, --c;
          } else {
            if (s[i + 1] == "BC")
              ans[i] = 'C', ++c, --b;
            else if (s[i + 1] == "AB")
              ans[i] = 'B', ++b, --c;
            else if (s[i + 1] == "AC")
              ans[i] = 'C', ++c, --b;
          }
        }
      } else if (s[i] == "AC") {
        if (a > c)
          ans[i] = 'C', ++c, --a;
        else if (c > a)
          ans[i] = 'A', ++a, --c;
        else {
          if (i == n) {
            ans[i] = 'C', ++c, --a;
          } else {
            if (s[i + 1] == "AC")
              ans[i] = 'C', ++c, --a;
            else if (s[i + 1] == "AB")
              ans[i] = 'A', ++a, --c;
            else if (s[i + 1] == "BC")
              ans[i] = 'C', ++c, --a;
          }
        }

      } else
        throw;
    }

  } else if (a + b + c == 1) {
    for (int i = 1; i <= n; ++i) {
      if (s[i] == "AB") {
        if (a + b == 0)
          no;
        else if (b > 0)
          ans[i] = 'A', ++a, --b;
        else if (a > 0)
          ans[i] = 'B', --b, ++a;
        else
          throw;
      } else if (s[i] == "AC") {
        if (a + c == 0)
          no;
        else if (c > 0)
          ans[i] = 'A', ++a, --c;
        else if (a > 0)
          ans[i] = 'C', ++c, --a;
        else
          throw;
      } else if (s[i] == "BC") {
        if (b + c == 0)
          no;
        else if (b > 0)
          ans[i] = 'C', ++c, --a;
        else if (c > 0)
          ans[i] = 'B', ++b, --c;
        else
          throw;
      }
    }
  } else
    no;

  puts("Yes");

  for (int i = 1; i <= n; ++i) {
    putchar(ans[i]);
    puts("");
  }
}

/*
    Good Luck
        -Lucina
*/