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

#include "bits/stdc++.h"

using namespace std;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)

const int INF10 = 100000001, ID_MAX = 20;
const long mod = 1e9 + 7;
const long long INF18 = 1e18 + 1;

struct edge {
  int to;
  long cost;
};

void sort2array(double *a, long *b, long n) {
  for (int i = 0; i < n; i++) {
    b[i] = i;
  }
  sort(b, b + n, [a](long i, long j) -> bool { return a[i] < a[j]; });
}
// bを何回足せばaを超えるか(O(a/b))
int wtover(int a, int b) {
  if (a % b > 0)
    return (a / b) + 1;
  else
    return a / b;
}
int bi_e[ID_MAX] = {0};
// 2進数表示したときの最高桁(O(log n))
int bi_max(long n) {
  int m = 0;
  for (m; (1 << m) <= n; m++)
    ;
  m = m - 1;
  return m;
}
// bi_eに二進数表示したやつを代入(O(log^2 n))
void bi_exs(long n) {
  memset(bi_e, 0, sizeof(bi_e));
  if (n < (1 << ID_MAX)) {
    for (int i = 0; n > 0; n = (n >> 1), i++)
      bi_e[i] = n & 1;
  }
}
// x^n mod m (nが負の時は０)(O(log n))
long myPow(long x, long n, long m) {
  if (n < 0)
    return 0;
  if (n == 0)
    return 1;
  if (n % 2 == 0)
    return myPow(x * x % m, n / 2, m);
  else
    return x * myPow(x, n - 1, m) % m;
}
// mのn分割数(O(nm))のmod
int divNum(int n, int m) {
  long long d[n + 1][m + 1];
  rep(j, n + 1) { d[j][0] = 1; }
  rep(j, m) { d[0][j + 1] = 0; }
  for (int j = 1; j <= n; j++) {
    for (int k = 1; k <= m; k++) {
      if (j > k)
        d[j][k] = d[j - 1][k];
      else
        d[j][k] = (d[j - 1][k] + d[j][k - j]) % mod;
    }
  }
  return d[n][m];
}

int main() {
  int i;
  // 入力
  string s, t;
  cin >> s;
  cin >> t;
  // 処理

  // 出力
  if (s.size() != t.size() - 1) {
    cout << "No" << endl;
    return 0;
  }
  rep(i, s.size()) {
    if (s[i] != t[i]) {
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}

Error: 0

Fixed submission:

#include "bits/stdc++.h"

using namespace std;

#define rep(i, n) for (int i = 0; i < (int)(n); i++)

const int INF10 = 100000001, ID_MAX = 20;
const long mod = 1e9 + 7;
const long long INF18 = 1e18 + 1;

struct edge {
  int to;
  long cost;
};

void sort2array(double *a, long *b, long n) {
  for (int i = 0; i < n; i++) {
    b[i] = i;
  }
  sort(b, b + n, [a](long i, long j) -> bool { return a[i] < a[j]; });
}
// bを何回足せばaを超えるか(O(a/b))
int wtover(int a, int b) {
  if (a % b > 0)
    return (a / b) + 1;
  else
    return a / b;
}
int bi_e[ID_MAX] = {0};
// 2進数表示したときの最高桁(O(log n))
int bi_max(long n) {
  int m = 0;
  for (m; (1 << m) <= n; m++)
    ;
  m = m - 1;
  return m;
}
// bi_eに二進数表示したやつを代入(O(log^2 n))
void bi_exs(long n) {
  memset(bi_e, 0, sizeof(bi_e));
  if (n < (1 << ID_MAX)) {
    for (int i = 0; n > 0; n = (n >> 1), i++)
      bi_e[i] = n & 1;
  }
}
// x^n mod m (nが負の時は０)(O(log n))
long myPow(long x, long n, long m) {
  if (n < 0)
    return 0;
  if (n == 0)
    return 1;
  if (n % 2 == 0)
    return myPow(x * x % m, n / 2, m);
  else
    return x * myPow(x, n - 1, m) % m;
}
// mのn分割数(O(nm))のmod
int divNum(int n, int m) {
  long long d[n + 1][m + 1];
  rep(j, n + 1) { d[j][0] = 1; }
  rep(j, m) { d[0][j + 1] = 0; }
  for (int j = 1; j <= n; j++) {
    for (int k = 1; k <= m; k++) {
      if (j > k)
        d[j][k] = d[j - 1][k];
      else
        d[j][k] = (d[j - 1][k] + d[j][k - j]) % mod;
    }
  }
  return d[n][m];
}

int main() {
  int i;
  // 入力
  char *s, *t;
  cin >> s;
  cin >> t;
  // 処理

  // 出力
  if (strlen(s) != strlen(t) - 1) {
    cout << "No" << endl;
    return 0;
  }
  rep(i, strlen(s)) {
    if (s[i] != t[i]) {
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}