Problem p03014 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define endl "\n"
const int MOD = 1e9 + 7;
#ifndef HOME
#define cerr                                                                   \
  if (0)                                                                       \
  cerr
#endif

int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  int a[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char x;
      cin >> x;
      if (x == '.')
        a[i][j] = 1;
      if (x == '#')
        a[i][j] = 0;
    }
  }
  int u[n][m], d[n][m], r[n][m], l[n][m];

  // Left
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (!a[i][j]) {
        l[i][j] = 0;
      } else {
        if (j == 0) {
          l[i][j] = 1;
        } else {
          l[i][j] = 1 + l[i][j - 1];
        }
      }
    }
  }

  // Right

  for (int i = 0; i < n; i++) {
    for (int j = m - 1; j >= 0; j--) {
      if (!a[i][j]) {
        r[i][j] = 0;
      } else {
        if (j == m - 1) {
          r[i][j] = 1;
        } else {
          r[i][j] = 1 + r[i][j + 1];
        }
      }
    }
  }
  // Up
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      if (!a[j][i]) {
        u[j][i] = 0;
      } else {
        if (j == 0) {
          u[j][i] = 1;
        } else {
          u[j][i] = 1 + u[j - 1][i];
        }
      }
    }
  }

  // Down
  for (int i = 0; i < m; i++) {
    for (int j = n - 1; j >= 0; j--) {
      if (!a[j][i]) {
        d[j][i] = 0;
      } else {
        if (j == n - 1) {
          d[j][i] = 1;
        } else {
          d[j][i] = 1 + d[j + 1][i];
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (a[i][j]) {
        ans = max(u[i][j] + d[i][j] + r[i][j] + l[i][j] - 3, ans);
      }
    }
  }
  cout << ans << endl;

  // for(int i=0;i<n;i++){
  //   for(int j=0;j<m;j++){
  //         //cerr<<i<<" "<<j<<endl;
  //         cout<<d[i][j]<<" ";
  //   }
  //   cout<<endl;
  // }
  // for(int i=0;i<m;i++){
  //   for(int j=0;j<n;j++){
  //         cerr<<i<<" "<<j<<endl;
  //         cout<<a[j][i]<<" ";
  //   }
  //   cout<<endl;
  // }

  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define endl "\n"
const int MOD = 1e9 + 7;
#ifndef HOME
#define cerr                                                                   \
  if (0)                                                                       \
  cerr
#endif

int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  int a[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char x;
      cin >> x;
      if (x == '.')
        a[i][j] = 1;
      if (x == '#')
        a[i][j] = 0;
    }
  }
  int u[n][m], d[n][m], r[n][m], l[n][m];

  // Left
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (!a[i][j]) {
        l[i][j] = 0;
      } else {
        if (j == 0) {
          l[i][j] = 1;
        } else {
          l[i][j] = 1 + l[i][j - 1];
        }
      }
    }
  }

  // Right

  for (int i = 0; i < n; i++) {
    for (int j = m - 1; j >= 0; j--) {
      if (!a[i][j]) {
        r[i][j] = 0;
      } else {
        if (j == m - 1) {
          r[i][j] = 1;
        } else {
          r[i][j] = 1 + r[i][j + 1];
        }
      }
    }
  }
  // Up
  for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
      if (!a[j][i]) {
        u[j][i] = 0;
      } else {
        if (j == 0) {
          u[j][i] = 1;
        } else {
          u[j][i] = 1 + u[j - 1][i];
        }
      }
    }
  }

  // Down
  for (int i = 0; i < m; i++) {
    for (int j = n - 1; j >= 0; j--) {
      if (!a[j][i]) {
        d[j][i] = 0;
      } else {
        if (j == n - 1) {
          d[j][i] = 1;
        } else {
          d[j][i] = 1 + d[j + 1][i];
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (a[i][j]) {
        ans = max(u[i][j] + d[i][j] + r[i][j] + l[i][j] - 3, ans);
      }
    }
  }
  cout << ans << endl;

  // for(int i=0;i<n;i++){
  //   for(int j=0;j<m;j++){
  //         //cerr<<i<<" "<<j<<endl;
  //         cout<<d[i][j]<<" ";
  //   }
  //   cout<<endl;
  // }
  // for(int i=0;i<m;i++){
  //   for(int j=0;j<n;j++){
  //         cerr<<i<<" "<<j<<endl;
  //         cout<<a[j][i]<<" ";
  //   }
  //   cout<<endl;
  // }

  return 0;
}