ABC128 D Lamp
問題の解き方よりも実装のほうが大変だった問題。他の人の解き方を見て、条件分岐の少ない再実装をしました。配列の実装を1から始めるのがポイントのようです。
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int h, w;
cin >> h >> w;
for (auto&& u : s) cin >> u;
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++) {
if (s[i - 1][j - 1] == '.') {
l[i][j] = l[i][j - 1] + 1;
u[i][j] = u[i - 1][j] + 1;
}
}
for (int i = h; i >= 1; i--)
for (int j = w; j >= 1; j--) {
if (s[i - 1][j - 1] == '.') {
r[i][j] = r[i][j + 1] + 1;
d[i][j] = d[i + 1][j] + 1;
}
}
int ret = 0;
for (int i = 1; i <= h; i++)
for (int j = 1; j <= w; j++) {
if (s[i - 1][j - 1] == '.')
ret = max(ret, l[i][j] + u[i][j] + r[i][j] + d[i][j] - 3);
}
cout << ret << endl;
}