Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 33;
- int n, m;
- long long dp[N][N][N];
- char grid[N][N];
- bool ok(int x, int y, char c) {
- if (c == '.') return true;
- else if (c == 'B') {
- for (int i = 0; i <= x; i++) {
- for (int j = 0; j <= y; j++) {
- if (grid[i][j] != '.' && grid[i][j] != c) return false;
- grid[i][j] = c;
- }
- }
- } else if (c == 'R') {
- for (int i = x; i < n; i++) {
- for (int j = y; j < m; j++) {
- if (grid[i][j] != '.' && grid[i][j] != c) return false;
- grid[i][j] = c;
- }
- }
- } else assert(0);
- return true;
- }
- int main() {
- scanf("%d %d", &n, &m);
- for (int i = 0; i < n; i++) {
- scanf("%s", grid[i]);
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (!ok(i, j, grid[i][j])) {
- puts("0");
- return 0;
- }
- }
- }
- for (int i = 0; i <= n; i++) {
- for (int j = 0; j <= m; j++) {
- dp[i][j][0] = 1;
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = m - 1; j >= 0; j--) {
- if (grid[i][j] == '.') {
- if (i > 0 && grid[i - 1][j] == '.') {
- for (int k = 1; k <= max(n, m); k++) {
- dp[i][j][0] += dp[i - 1][j][k];
- }
- }
- if (i == 0 || (grid[i - 1][j] != 'R')) for (int k = 1; k <= max(n, m); k++) {
- dp[i][j][k] += dp[i][j + 1][k - 1];
- }
- }
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (grid[i][j] == '.') {
- for (int k = 0; k <= max(n, m); k++) {
- if (i > 0) dp[i - 1][j][k] = 0;
- dp[i][j + 1][k] = 0;
- }
- } else {
- for (int k = 0; k <= max(n, m); k++) {
- dp[i][j][k] = 0;
- }
- }
- }
- }
- long long ans = 1;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- long long sum = 0;
- for (int k = 0; k <= max(n, m); k++) {
- sum += dp[i][j][k];
- }
- if (sum > 0) ans *= sum;
- }
- }
- printf("%lld\n", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement