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

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main() {
  vector<vector<int>> V;
  string s;
  while (getline(cin, s)) {
    string val;
    stringstream ss(s);
    vector<int> x;
    while (getline(ss, val, ',')) {
      x.push_back(atoi(val.c_str()));
    }
    V.push_back(x);
  }

  for (int i = 1; i < V.size() / 2 + 1; i++) {
    for (int l = 0; l < V[i].size(); l++) {
      int a = 0, b = 0;
      if (l)
        a = V[i - 1][l - 1];
      if (l != V[i].size() - 1)
        b = V[i - 1][l];
      V[i][l] += max(a, b);
    }
  }
  for (int i = V.size() / 2 + 1; i < V.size(); i++) {
    for (int l = 0; l < V[i].size(); l++) {
      V[i][l] += max(V[i - 1][l], V[i - 1][l + 1]);
    }
  }
  for (int i = 0; i < V.size(); i++) {
    for (int l = 0; l < V[i].size(); l++) {
      // printf("%3d",V[i][l]);
    }
    // cout<<endl;
  }

  cout << V.back().back() << endl;
}

Error: 0

Fixed submission:

#define _CRT_SECURE_NO_WARNINGS 1
#include <algorithm>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
#define M_PI 3.141592
#define FOR(i, n) for (int i = 0; i < (int)n; i++)
#define FORI(i, k, n) for (int i = k; i < (int)n; i++)
#define toRad 2.0 * M_PI / 360.0
#define inin(x)                                                                \\
  int x;                                                                       \\
  cin >> x;
#define all(x) x.begin(), x.end()
#define debug(x) cout << #x << " :" << x << endl;
#define rep(i, n) for (int i = 0; i < (int)n; i++)
#define EPS 1e-12
#define pri_max 60000
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef vector<int> vi;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};

/*
bool memo[pri_max] = {};
vector<int> pri;
void calc()
{
        for (int i = 2; i < pri_max; i++)
        {
                if (memo[i] == false)
                {
                        pri.push_back(i);
                        for (int l = i; l < pri_max; l += i)
                        {
                                memo[l] = true;
                        }
                }
        }
}*/
double len(pdd a, pdd b) {
  return sqrt((b.first - a.first) * (b.first - a.first) +
              (b.second - a.second) * (b.second - a.second));
}
vector<int> m[300];

int main() {
  vector<vi> v;
  string s;
  while (getline(cin, s)) {
    stringstream ss(s);
    vi sv;
    while (getline(ss, s, ',')) {
      sv.push_back(s[0] - '0');
    }
    v.push_back(sv);
  }

  int h = (v.size() + 1) / 2;
  for (int i = 0; i < h * 2 + 1; i++)
    m[0].push_back(0);
  for (int i = 1; i <= h; i++) {
    m[i].push_back(0);
    for (int l = i; l < i + 5; l++) {
      m[i].push_back(v[l - 1].back());
      v[l - 1].pop_back();
    }
    for (int l = 0; l < h; l++)
      m[i].push_back(0);
  }
  for (int i = h + 1; i < h + 1 + h; i++) {
    for (int l = 0; l < 2 * h + 1; l++) {
      m[i].push_back(0);
    }
  }

  for (int i = 2; i < 2 * h + 1; i++) {
    for (int l = i, k = 1; l >= 1; l--, k++) {
      m[l][k] = max(m[l][k] + m[l][k - 1], m[l][k] + m[l - 1][k]);
    }
  }
  cout << m[h][h] << endl;
}