Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: Ryuthin94

Problemset: หุ่นพัง

Language: cpp

Time: 0.003 second

Submitted On: 2025-12-14 21:27:56

/*
TASK : r2_broken
LANG : C++
*/

#include <bits/stdc++.h>
using namespace std;

int n;
vector<string> grid;
vector<vector<int>> memo;

bool f(int r, int c)
{
    if (r >= n || c >= n || grid[r][c] == 'X')
        return false;
    if (r == n - 1 && c == n - 1)
        return true;
    if (memo[r][c] != -1)
        return memo[r][c];

    return memo[r][c] = f(r + 1, c) || f(r, c + 1);
}

int main()
{
    cin >> n;
    grid.resize(n);
    for (int i = 0; i < n; i++)
        cin >> grid[i];

    memo.resize(n, vector<int>(n, -1));

    int count = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (f(i, j))
                count++;
        }
    }

    cout << count;
}