Problem p02735 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll maxs = 1e6 + 5;
const ll lmaxs = 20;
ll mod = 1e9 + 7;
ll oo = 1e15;

#define IOS                                                                    \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(nullptr);                                                            \
  cout.tie(nullptr);
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define I insert
#define endl '\n'

void pre() {}

void solve() {
  ll n, m;
  cin >> n >> m;
  ll a[n + 1][m + 1];
  memset(a, 0, sizeof a);
  for (ll i = 1; i < n + 1; i++) {
    for (ll j = 1; j < m + 1; j++) {
      char ch;
      cin >> ch;
      if (ch == '#')
        a[i][j] = 1;
    }
  }
  ll dp[n + 1][m + 1];
  for (ll i = 1; i <= n; i++) {
    for (ll j = 1; j <= m; j++) {
      if (i == 1 and j == 1) {
        dp[i][j] = a[i][j];
      } else if (i == 1) {
        dp[i][j] =
            dp[i][j - 1] + (a[i][j] == 1 ? (a[i][j - 1] == 0 ? 1 : 0) : 0);
      } else if (j == 1) {
        dp[i][j] = dp[i - 1][j] + (a[i][j] == 1 ? a[i - 1][j] == 0 ? 1 : 0 : 0);
      } else {
        dp[i][j] = dp[i - 1][j] + (a[i][j] == 1 ? a[i - 1][j] == 0 ? 1 : 0 : 0);
        dp[i][j] = min(dp[i][j],
                       dp[i][j - 1] +
                           (a[i][j] == 1 ? a[i][j - 1] == 0 ? 1ll : 0ll : 0ll));
      }
    }
  }
  // for(ll i=1;i<n+1;i++){
  //     for(ll j=1;j<m+1;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }

  cout << dp[n][m] << endl;
}

int main() {
#ifndef ONLINE_JUDGE
  freopen("input00.txt", "r", stdin);
#endif
  IOS;
  pre();
  ll T = 1;
  // cin>>T;
  while (T--) {
    solve();
  }
  return 0;
}

Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll maxs = 1e6 + 5;
const ll lmaxs = 20;
ll mod = 1e9 + 7;
ll oo = 1e15;

#define IOS                                                                    \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(nullptr);                                                            \
  cout.tie(nullptr);
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define I insert
#define endl '\n'

void pre() {}

void solve() {
  ll n, m;
  cin >> n >> m;
  ll a[n + 1][m + 1];
  memset(a, 0, sizeof a);
  for (ll i = 1; i < n + 1; i++) {
    for (ll j = 1; j < m + 1; j++) {
      char ch;
      cin >> ch;
      if (ch == '#')
        a[i][j] = 1;
    }
  }
  ll dp[n + 1][m + 1];
  for (ll i = 1; i <= n; i++) {
    for (ll j = 1; j <= m; j++) {
      if (i == 1 and j == 1) {
        dp[i][j] = a[i][j];
      } else if (i == 1) {
        dp[i][j] =
            dp[i][j - 1] + (a[i][j] == 1 ? (a[i][j - 1] == 0 ? 1 : 0) : 0);
      } else if (j == 1) {
        dp[i][j] = dp[i - 1][j] + (a[i][j] == 1 ? a[i - 1][j] == 0 ? 1 : 0 : 0);
      } else {
        dp[i][j] = dp[i - 1][j] + (a[i][j] == 1 ? a[i - 1][j] == 0 ? 1 : 0 : 0);
        dp[i][j] = min(dp[i][j],
                       dp[i][j - 1] +
                           (a[i][j] == 1 ? a[i][j - 1] == 0 ? 1ll : 0ll : 0ll));
      }
    }
  }
  // for(ll i=1;i<n+1;i++){
  //     for(ll j=1;j<m+1;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }

  cout << dp[n][m] << endl;
}

int main() {
#ifdef ONLINE_JUDGE
  freopen("input00.txt", "r", stdin);
#endif
  IOS;
  pre();
  ll T = 1;
  // cin>>T;
  while (T--) {
    solve();
  }
  return 0;
}