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

#include <algorithm> // sort, 二分探索(lower_bound)など
#include <cmath>     // pow, logなど
#include <complex>   // 複素数
#include <deque>     // 両端アクセスのキュー
#include <iostream>  // 入出力
#include <iterator>
#include <map>
#include <numeric> // iota(整数列の生成), gcd, lcm
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map> // 順序保持しないmap
#include <unordered_set> // 順序保持しないset
#include <utility>       // pair
#include <vector>

#define REP(i, n) for (int i = (0); i < (n); ++i)
#define REPR(i, n) for (int i = (n - 1); i >= (0); --i)
#define ALL(container) (container).begin(), (container).end()
#define MAX(x) *max_element(ALL(x)) // 最大値を求める
#define MIN(x) *min_element(ALL(x)) // 最小値を求める

using namespace std;
typedef long long ll;

constexpr size_t INF = 1e9 + 100;
constexpr int MOD = 1000000007;

int main() {
  size_t N, M, K;
  cin >> N >> M >> K;
  vector<size_t> a(N + 1), b(M + 1);
  size_t A, B;
  a[0] = 0;
  b[0] = 0;
  for (size_t i = 1; i <= N; ++i) {
    cin >> A;
    a[i] = a[i - 1] + A;
  }
  for (size_t i = 1; i <= M; ++i) {
    cin >> B;
    b[i] = b[i - 1] + B;
  }

  size_t max_count = 0, b_i = M;
  for (size_t a_i = 0; a_i <= N; ++a_i) {
    if (a[a_i] > K) {
      break;
    }
    while (a[a_i] + b[b_i] > K) {
      b_i--;
    }
    max_count = max(max_count, a_i + b_i);
  }

  cout << max_count << endl;

  return 0;
}


Error: 0

Fixed submission:

#include <algorithm> // sort, 二分探索(lower_bound)など
#include <cmath>     // pow, logなど
#include <complex>   // 複素数
#include <deque>     // 両端アクセスのキュー
#include <iostream>  // 入出力
#include <iterator>
#include <map>
#include <numeric> // iota(整数列の生成), gcd, lcm
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map> // 順序保持しないmap
#include <unordered_set> // 順序保持しないset
#include <utility>       // pair
#include <vector>

#define REP(i, n) for (int i = (0); i < (n); ++i)
#define REPR(i, n) for (int i = (n - 1); i >= (0); --i)
#define ALL(container) (container).begin(), (container).end()
#define MAX(x) *max_element(ALL(x)) // 最大値を求める
#define MIN(x) *min_element(ALL(x)) // 最小値を求める

using namespace std;
typedef long long ll;

constexpr size_t INF = 1e9 + 100;
constexpr int MOD = 1000000007;

int main() {
  size_t N, M, K;
  cin >> N >> M >> K;
  vector<size_t> A(N), B(M);
  for (size_t i = 0; i < N; ++i) {
    cin >> A[i];
  }
  for (size_t i = 0; i < M; ++i) {
    cin >> B[i];
  }
  if (A[0] > K && B[0] > K) {
    cout << 0 << endl;
    return 0;
  }

  size_t min_count = 1, total_book_count = N + M, b_num, min_sum;
  while (true) {
    if (min_count > total_book_count) {
      min_count = total_book_count;
      break;
    }
    min_sum = INF;
    for (size_t a_num = 0; a_num <= min_count; ++a_num) {
      b_num = min_count - a_num;
      size_t tmp_sum = 0;
      for (size_t a_i = 0; a_i < a_num; ++a_i) {
        tmp_sum += A[a_i];
      }
      for (size_t b_i = 0; b_i < b_num; ++b_i) {
        tmp_sum += B[b_i];
      }
      if (tmp_sum < min_sum) {
        min_sum = tmp_sum;
      }
      if (min_sum <= K) {
        break;
      }
    }
    if (min_sum > K) {
      min_count--;
      break;
    }
    min_count++;
  }

  cout << min_count << endl;

  return 0;
}