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

#include "bits/stdc++.h"
using namespace std;
// http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2438&lang=jp
typedef long long ll;
#define INF 1 << 30
#define LINF 1LL << 60
string YAML[50010];

vector<string> split(const string &s, char delim) {
  vector<string> elems;
  stringstream ss(s);
  string item;
  while (getline(ss, item, delim)) {
    if (!item.empty()) {
      elems.push_back(item);
    }
  }
  return elems;
}

int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string k;
  cin >> k;
  auto key = split(k, '.');
  int key_cnt = key.size();
  cin.ignore();
  int cnt = 0;
  while (getline(cin, YAML[cnt++]))
    ;
  cnt--;
  int pre_space = 0;
  int key_at = 0;
  bool next_flag = false;
  bool through = false;
  for (int i = 0; i < cnt; i++) {
    auto yaml = split(YAML[i], ':');
    int space;
    for (int l = 0; l < yaml[0].length(); l++)
      if (yaml[0][l] != ' ') {
        space = l;
        break;
      }
    if (!through & space < pre_space)
      break;
    if (through & (space != pre_space))
      continue;
    else
      through = false;

    if (next_flag) {
      pre_space = space;
      next_flag = false;
    }
    if (yaml[0].substr(space) == key[key_at]) {
      key_at++;
      if (key_at == key_cnt) {
        if (yaml.size() == 2) {
          yaml[1][0] = '"';
          cout << "string " << yaml[1] << '"' << endl;
          return 0;
        } else {
          cout << "object" << endl;
          return 0;
        }
      } else {
        if (yaml.size() == 2)
          break;
        else {
          next_flag = true;
          continue;
        }
      }
    } else {
      if (yaml.size() == 1)
        through = true;
      else
        continue;
    }
  }
  cout << "no such property" << endl;
  return 0;
}

Error: 0

Fixed submission:

#include "bits/stdc++.h"
using namespace std;
// http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2438&lang=jp
typedef long long ll;
#define INF 1 << 30
#define LINF 1LL << 60
string YAML[50010];

vector<string> split(const string &s, char delim) {
  vector<string> elems;
  stringstream ss(s);
  string item;
  while (getline(ss, item, delim)) {
    if (!item.empty()) {
      elems.push_back(item);
    }
  }
  return elems;
}

int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string k;
  cin >> k;
  auto key = split(k, '.');
  int key_cnt = key.size();
  cin.ignore();
  int cnt = 0;
  while (getline(cin, YAML[cnt++]))
    ;
  int pre_space = 0;
  int key_at = 0;
  bool next_flag = false;
  bool through = false;
  for (int i = 0; i < cnt; i++) {
    auto yaml = split(YAML[i], ':');
    int space;
    for (int l = 0; l < yaml[0].length(); l++)
      if (yaml[0][l] != ' ') {
        space = l;
        break;
      }

    if (through & (space != pre_space))
      continue;
    else
      through = false;

    if (next_flag) {
      pre_space = space;
      next_flag = false;
    }
    if (yaml[0].substr(space) == key[key_at]) {
      key_at++;
      if (key_at == key_cnt) {
        if (yaml.size() == 2) {
          yaml[1][0] = '"';
          cout << "string " << yaml[1] << '"' << endl;
          return 0;
        } else {
          cout << "object" << endl;
          return 0;
        }
      } else {
        if (yaml.size() == 2)
          break;
        else {
          next_flag = true;
          continue;
        }
      }
    } else {
      if (yaml.size() == 1)
        through = true;
      else
        continue;
    }
  }
  cout << "no such property" << endl;
  return 0;
}