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

#include <bits/stdc++.h>

using namespace std;

int main() {
  int n, a, b, c, i, j, ab, bc, ca, nodap = 0, dap = 0;
  string s[100007];
  char C[100007];
  cin >> n >> a >> b >> c;
  for (i = 1; i <= n; i++)
    cin >> s[i];

  if ((a > 0) && (b > 0) && (c > 0)) {
    printf("Yes\\n");
    ab = 0;
    bc = 0;
    ca = 0;
    for (i = 1; i <= n; i++) {
      if (s[i] == "AB") {
        if (ab)
          printf("A\\n");
        else
          printf("B\\n");
        ab = 1 - ab;
      } else if (s[i] == "BC") {
        if (bc)
          printf("B\\n");
        else
          printf("C\\n");
        bc = 1 - bc;
      } else {
        if (ca)
          printf("C\\n");
        else
          printf("A\\n");
        ca = 1 - ca;
      }
    }
  } else {
    for (i = 1; i <= n; i++) {
      if (dap) {
        if (s[i] == "AB") {
          if (ab)
            printf("A\\n");
          else
            printf("B\\n");
          ab = 1 - ab;
        } else if (s[i] == "BC") {
          if (bc)
            printf("B\\n");
          else
            printf("C\\n");
          bc = 1 - bc;
        } else {
          if (ca)
            printf("C\\n");
          else
            printf("A\\n");
          ca = 1 - ca;
        }
      }

      else {
        if (s[i] == "AB") {
          if ((a == 0) && (b == 0))
            nodap = 1;
          else if (a == 0) {
            C[i] = 'A';
            a++;
            b--;
          } else if (b == 0) {
            C[i] = 'B';
            a--;
            b++;
          } else {
            if ((i == n) || (s[i + 1] == "AB")) {
              if (a > b) {
                C[i] = 'B';
                a--;
                b++;
              } else {
                C[i] = 'A';
                a++;
                b--;
              }
            } else if (s[i + 1] == "AC") {
              if (a >= 3) {
                C[i] = 'B';
                a--;
                b++;
              } else if (b > 1) {
                C[i] = 'A';
                a++;
                b--;
              } else if ((a == 2)) {
                C[i] = 'B';
                a--;
                b++;
              } else {
                C[i] = 'A';
                a++;
                b--;
              }
            } else {
              if (b >= 3) {
                C[i] = 'A';
                b--;
                a++;
              } else if (a > 1) {
                C[i] = 'B';
                b++;
                a--;
              } else if ((b == 2)) {
                C[i] = 'A';
                b--;
                a++;
              } else {
                C[i] = 'B';
                b++;
                a--;
              }
            }
          }
        } else if (s[i] == "BC") {
          if ((b == 0) && (c == 0))
            nodap = 1;
          else if (b == 0) {
            C[i] = 'B';
            b++;
            c--;
          } else if (c == 0) {
            C[i] = 'C';
            b--;
            c++;
          } else {
            if ((i == n) || (s[i + 1] == "BC")) {
              if (b > c) {
                C[i] = 'C';
                b--;
                c++;
              } else {
                C[i] = 'B';
                b++;
                c--;
              }
            } else if (s[i + 1] == "AB") {
              if (b >= 3) {
                C[i] = 'C';
                b--;
                c++;
              } else if (c > 1) {
                C[i] = 'B';
                b++;
                c--;
              } else if ((b == 2)) {
                C[i] = 'C';
                b--;
                c++;
              } else {
                C[i] = 'B';
                b++;
                c--;
              }
            } else {
              if (c >= 3) {
                C[i] = 'B';
                c--;
                b++;
              } else if (b > 1) {
                C[i] = 'C';
                c++;
                b--;
              } else if ((c == 2)) {
                C[i] = 'B';
                c--;
                b++;
              } else {
                C[i] = 'C';
                c++;
                b--;
              }
            }
          }
        } else {
          if ((c == 0) && (a == 0))
            nodap = 1;
          else if (c == 0) {
            C[i] = 'C';
            c++;
            a--;
          } else if (a == 0) {
            C[i] = 'A';
            c--;
            a++;
          } else {
            if ((i == n) || (s[i + 1] == "AC")) {
              if (c > a) {
                C[i] = 'A';
                c--;
                a++;
              } else {
                C[i] = 'C';
                c++;
                a--;
              }
            } else if (s[i + 1] == "BC") {
              if (c >= 3) {
                C[i] = 'A';
                c--;
                a++;
              } else if (a > 1) {
                C[i] = 'C';
                c++;
                a--;
              } else if ((c == 2)) {
                C[i] = 'A';
                c--;
                a++;
              } else {
                C[i] = 'C';
                c++;
                a--;
              }
            } else {
              if (a >= 3) {
                C[i] = 'C';
                a--;
                c++;
              } else if (c > 1) {
                C[i] = 'A';
                a++;
                c--;
              } else if ((a == 2)) {
                C[i] = 'C';
                a--;
                c++;
              } else {
                C[i] = 'A';
                a++;
                c--;
              }
            }
          }
        }

        if ((a > 0) && (b > 0) && (c > 0)) {
          dap++;
          printf("Yes\\n");
          for (j = 1; j <= i; j++)
            printf("%c\\n", C[j]);
          ab = 0;
          bc = 0;
          ca = 0;
        }
      }
      if (nodap)
        break;
    }

    if (dap == 0) {
      if (nodap)
        printf("No");
      else {
        printf("Yes\\n");
        for (i = 1; i <= n; i++)
          printf("%c\\n", C[i]);
      }
    }
  }

  return 0;
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

int main() {
  int n, a, b, c, i, j, ab, bc, ca, nodap = 0, dap = 0;
  string s[100001];
  char C[100001];
  cin >> n >> a >> b >> c;
  for (i = 1; i <= n; i++)
    cin >> s[i];

  if ((a > 0) && (b > 0) && (c > 0)) {
    printf("Yes\\n");
    ab = 0;
    bc = 0;
    ca = 0;
    for (i = 1; i <= n; i++) {
      if (s[i] == "AB") {
        if (ab)
          printf("A\\n");
        else
          printf("B\\n");
        ab = 1 - ab;
      } else if (s[i] == "BC") {
        if (bc)
          printf("B\\n");
        else
          printf("C\\n");
        bc = 1 - bc;
      } else {
        if (ca)
          printf("C\\n");
        else
          printf("A\\n");
        ca = 1 - ca;
      }
    }
  } else {
    for (i = 1; i <= n; i++) {
      if (dap) {
        if (s[i] == "AB") {
          if (ab)
            printf("A\\n");
          else
            printf("B\\n");
          ab = 1 - ab;
        } else if (s[i] == "BC") {
          if (bc)
            printf("B\\n");
          else
            printf("C\\n");
          bc = 1 - bc;
        } else {
          if (ca)
            printf("C\\n");
          else
            printf("A\\n");
          ca = 1 - ca;
        }
      }

      else {
        if (s[i] == "AB") {
          if ((a == 0) && (b == 0))
            nodap = 1;
          else if (a == 0) {
            C[i] = 'A';
            a++;
            b--;
          } else if (b == 0) {
            C[i] = 'B';
            a--;
            b++;
          } else {
            if ((i == n) && (s[i + 1] == "AB")) {
              if (a > b) {
                C[i] = 'B';
                a--;
                b++;
              } else {
                C[i] = 'A';
                a++;
                b--;
              }
            } else if (s[i + 1] == "AC") {
              if (a >= 3) {
                C[i] = 'B';
                a--;
                b++;
              } else if (b > 1) {
                C[i] = 'A';
                a++;
                b--;
              } else if ((a == 2)) {
                C[i] = 'B';
                a--;
                b++;
              } else {
                C[i] = 'A';
                a++;
                b--;
              }
            } else {
              if (b >= 3) {
                C[i] = 'A';
                b--;
                a++;
              } else if (a > 1) {
                C[i] = 'B';
                b++;
                a--;
              } else if ((b == 2)) {
                C[i] = 'A';
                b--;
                a++;
              } else {
                C[i] = 'B';
                b++;
                a--;
              }
            }
          }
        } else if (s[i] == "BC") {
          if ((b == 0) && (c == 0))
            nodap = 1;
          else if (b == 0) {
            C[i] = 'B';
            b++;
            c--;
          } else if (c == 0) {
            C[i] = 'C';
            b--;
            c++;
          } else {
            if ((i == n) && (s[i + 1] == "BC")) {
              if (b > c) {
                C[i] = 'C';
                b--;
                c++;
              } else {
                C[i] = 'B';
                b++;
                c--;
              }
            } else if (s[i + 1] == "AB") {
              if (b >= 3) {
                C[i] = 'C';
                b--;
                c++;
              } else if (c > 1) {
                C[i] = 'B';
                b++;
                c--;
              } else if ((b == 2)) {
                C[i] = 'C';
                b--;
                c++;
              } else {
                C[i] = 'B';
                b++;
                c--;
              }
            } else {
              if (c >= 3) {
                C[i] = 'B';
                c--;
                b++;
              } else if (b > 1) {
                C[i] = 'C';
                c++;
                b--;
              } else if ((c == 2)) {
                C[i] = 'B';
                c--;
                b++;
              } else {
                C[i] = 'C';
                c++;
                b--;
              }
            }
          }
        } else {
          if ((c == 0) && (a == 0))
            nodap = 1;
          else if (c == 0) {
            C[i] = 'C';
            c++;
            a--;
          } else if (a == 0) {
            C[i] = 'A';
            c--;
            a++;
          } else {
            if ((i == n) && (s[i + 1] == "AC")) {
              if (c > a) {
                C[i] = 'A';
                c--;
                a++;
              } else {
                C[i] = 'C';
                c++;
                a--;
              }
            } else if (s[i + 1] == "BC") {
              if (c >= 3) {
                C[i] = 'A';
                c--;
                a++;
              } else if (a > 1) {
                C[i] = 'C';
                c++;
                a--;
              } else if ((c == 2)) {
                C[i] = 'A';
                c--;
                a++;
              } else {
                C[i] = 'C';
                c++;
                a--;
              }
            } else {
              if (a >= 3) {
                C[i] = 'C';
                a--;
                c++;
              } else if (c > 1) {
                C[i] = 'A';
                a++;
                c--;
              } else if ((a == 2)) {
                C[i] = 'C';
                a--;
                c++;
              } else {
                C[i] = 'A';
                a++;
                c--;
              }
            }
          }
        }

        if ((a > 0) && (b > 0) && (c > 0)) {
          dap++;
          printf("Yes\\n");
          for (j = 1; j <= i; j++)
            printf("%c\\n", C[j]);
          ab = 0;
          bc = 0;
          ca = 0;
        }
      }
      if (nodap)
        break;
    }

    if (dap == 0) {
      if (nodap)
        printf("No");
      else {
        printf("Yes\\n");
        for (i = 1; i <= n; i++)
          printf("%c\\n", C[i]);
      }
    }
  }

  return 0;
}