Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3757664
А
Аноним
23 октября 2026 18:46 · публичный вопрос
А
Аноним

Реши задание на изображении

Нейросеть23 октября 2026 18:46

Краткий ответ: считаем все единичные грани решётки, затем убираем грани, которые оказались внутри одного кластера.

Пусть N = n*m*k — всего клеток. Если бы все клетки были отдельными, граней было бы 6N. Каждая пара соседних клеток склеивает две грани в одну, поэтому:

\[ \text{всего различных граней}=6N-E, \]

где E — число соседних пар клеток.

Затем вычитаем S — соседние пары, попавшие внутрь одного кластера:

\[ \text{ответ}=6nmk-E-S. \]

Для этой задачи:

\[ E=k\bigl(n(m-1)+m(n-1)\bigr)+nm(k-1) \]

— соседства внутри слоёв и между слоями.

\[ S=k\cdot \text{sameRG}+(k-1)\cdot \text{blue} \]

где:

  • sameRG — число пар соседних клеток R–R или G–G в одном слое;
  • blue — число клеток B в одном слое.

Код:

import sys

def solve():
    input = sys.stdin.readline

    n, m, k = map(int, input().split())
    grid = [input().strip() for _ in range(n)]

    same_rg = 0
    blue = 0

    # Пары внутри одного слоя: вправо и вниз
    for i in range(n):
        row = grid[i]
        blue += row.count('B')

        for j in range(m - 1):
            if row[j] == row[j + 1] and row[j] != 'B':
                same_rg += 1

    for i in range(n - 1):
        for j in range(m):
            if grid[i][j] == grid[i + 1][j] and grid[i][j] != 'B':
                same_rg += 1

    # Все соседние пары клеток
    E = k * (n * (m - 1) + m * (n - 1)) + n * m * (k - 1)

    # Соседства внутри одного кластера
    S = k * same_rg + (k - 1) * blue

    answer = 6 * n * m * k - E - S
    print(answer)

if __name__ == "__main__":
    solve()

Сложность: O(n*m) по времени, O(n*m) по памяти.

Проверка на примере 2 3 2 / RRG / RBG: получается 45. На 1 1 1 / R — 6, на 1 2 1 / BB — 11.

Реши задание на изображении
Краткий ответ: считаем все единичные грани решётки, затем убираем грани, которые оказались внутри одного кластера. Пусть `N = n*m*k` — всего клеток. Если бы все клетки были отдельными, граней было бы `6N`. Каждая пара соседних клеток склеивает две грани в одну, поэтому: \[ \text{всего различных граней}=6N-E, \] где `E` — число соседних пар клеток. Затем вычитаем `S` — соседние пары, попавшие внутрь одного кластера: \[ \text{ответ}=6nmk-E-S. \] Для этой задачи: \[ E=k\bigl(n(m-1)+m(n-1)\bigr)+nm(k-1) \] — соседства внутри слоёв и между слоями. \[ S=k\cdot \text{sameRG}+(k-1)\cdot \text{blue} \] где: - `sameRG` — число пар соседних клеток `R–R` или `G–G` в одном слое; - `blue` — число клеток `B` в одном слое. Код: ```python import sys def solve(): input = sys.stdin.readline n, m, k = map(int, input().split()) grid = [input().strip() for _ in range(n)] same_rg = 0 blue = 0 # Пары внутри одного слоя: вправо и вниз for i in range(n): row = grid[i] blue += row.count('B') for j in range(m - 1): if row[j] == row[j + 1] and row[j] != 'B': same_rg += 1 for i in range(n - 1): for j in range(m): if grid[i][j] == grid[i + 1][j] and grid[i][j] != 'B': same_rg += 1 # Все соседние пары клеток E = k * (n * (m - 1) + m * (n - 1)) + n * m * (k - 1) # Соседства внутри одного кластера S = k * same_rg + (k - 1) * blue answer = 6 * n * m * k - E - S print(answer) if __name__ == "__main__": solve() ``` Сложность: `O(n*m)` по времени, `O(n*m)` по памяти. Проверка на примере `2 3 2 / RRG / RBG`: получается `45`. На `1 1 1 / R` — `6`, на `1 2 1 / BB` — `11`.