https://atcoder.jp/contests/hhkb2020/tasks/hhkb2020_b
解説
https://atcoder.jp/contests/hhkb2020/submissions/17315225
布団を敷く可能性がある場所をすべて全探索することで答える。
横置きの場合
横置きする場合の布団を置く可能性がある場所は、横置きの左の座標でカウントすると考えると、H×(W-1)通りになる。
これは104通りくらいなので、全列挙は問題ない。
後は、左の座標と右の座標がどちらも散らかっていないなら、置けるとしてカウントする。
縦置きの場合
これも同様である。
縦置きする場合の布団を置く可能性がある場所は、縦置きの上の座標でカウントすると考えると、W×(H-1)通りになる。
これは104通りくらいなので、全列挙は問題ない。
後は、上の座標と下の座標がどちらも散らかっていないなら、置けるとしてカウントする。
int H, W; string S[101]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> H >> W; rep(y, 0, H) cin >> S[y]; int ans = 0; // 横置き rep(y, 0, H) rep(x, 0, W - 1) if (S[y][x] == '.' && S[y][x + 1] == '.') ans++; // 縦置き rep(y, 0, H - 1) rep(x, 0, W) if (S[y][x] == '.' && S[y + 1][x] == '.') ans++; cout << ans << endl; }