Задача
Дана прямоугольная доска [latex]M×N[/latex], некоторые клетки в которой вырезаны. Сколькими способами можно поставить на неё «уголок» из трёх клеток так, чтобы все три клетки уголка находились внутри доски и не были вырезаны?
Входные данные
В первой строке входного файла даны два числа [latex]M[/latex] и [latex]N[/latex] [latex](1 \leq M, N \leq 100)[/latex], разделённые пробелом. В следующих [latex]M[/latex] строках содержится по [latex]N[/latex] символов в каждой; [latex]i[/latex]-ый символ [latex]j[/latex]-ой из этих строк равен ‘X’ (большая буква икс), если клетка вырезана, и ‘.’ (точка) в противном случае.
Выходные данные
Выведите одно число — сколько существует способов поставить уголок на данную доску.
Тесты
Входные данные | Выходные данные |
---|---|
2 2 .. .. |
4 |
2 3 ..X .X. |
1 |
5 4 …. X.XX …. X..X ..XX |
12 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import java.io.BufferedReader; import java.io.InputStreamReader; class Main { public static void main (String[] args) throws java.lang.Exception { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String[] params1 = bufferedReader.readLine().split(" "); int x, y; x = Integer.parseInt(params1[0]); y = Integer.parseInt(params1[1]); boolean mas[][] = new boolean[x][y]; for (int i = 0; i < x; ++i){ String[] params2 = bufferedReader.readLine().split(" "); for (int j = 0; j < y; ++j){ char buff; buff = params2[0].charAt(j); if (buff == '.') mas[i][j] = true; else mas[i][j] = false; } System.out.print("\n"); } int sum = 0; for (int i = 0; i < x; ++i){ for (int j = 0; j < y; ++j){ if (mas[i][j]){ if (i - 1 >= 0 && j - 1 >= 0) if (mas[i - 1][j] && mas[i][j - 1]) ++sum; if (i - 1 >= 0 && j + 1 < y) if (mas[i - 1][j] && mas[i][j + 1]) ++sum; if (i + 1 < x && j + 1 < y) if (mas[i + 1][j] && mas[i][j + 1]) ++sum; if (i + 1 < x && j - 1 >= 0) if (mas[i + 1][j] && mas[i][j - 1]) ++sum; } } } System.out.print(sum); } } |
Решение
Для решения данной задачи создаем динамический массив типа [latex]bool[/latex] [latex]x[/latex] на [latex]y[/latex]. Заполняем соответствующий элемент значением [latex]true[/latex], когда вводится «.» и значением [latex]false[/latex] в противном случае. Далее увеличиваем значение количества уголков на , если существуют не пустые клетки.