Вопрос:

Н. Рабочие дни (10 баллов)

Фотография

Ответ ассистента

Для решения этой задачи нужно построить календарь в виде сетки, где каждый ряд — это неделя. Всего в месяце $n$ дней, а в неделе $m$ дней. Первый день месяца приходится на $k$-й день недели. ### Алгоритм решения: 1. Создадим матрицу (или двумерный массив), где будем записывать номера дней месяца. 2. Заполним её числами от $1$ до $n$, начиная с $k$-й позиции в первом ряду. Остальные ячейки будут пустыми (или заполнены нулями). 3. Нам нужно найти «самую большую по площади прямоугольную область из рядом стоящих чисел». Это значит, что нужно найти прямоугольник максимальной площади (количество строк $\times$ количество столбцов), который целиком состоит из заполненных ячеек (чисел месяца). 4. Переберем все возможные левые верхние $(r_1, c_1)$ и правые нижние $(r_2, c_2)$ координаты прямоугольников в нашей сетке. 5. Для каждого прямоугольника проверим, что все ячейки внутри него — это дни месяца (т.е. они не пустые). 6. Если условие выполняется, вычислим его площадь $(r_2 - r_1 + 1) \times (c_2 - c_1 + 1)$ и обновим максимальную найденную площадь. 7. Ответ — это максимальная найденная площадь, так как именно эта область состоит из рабочих дней. ### Пример реализации (Python): ```python n, m, k = map(int, input().split()) # Строим сетку grid = [] row = [0] * m current_day = 1 # Заполняем первую неделю for j in range(k - 1, m): if current_day <= n: row[j] = current_day current_day += 1 grid.append(row) # Заполняем остальные недели while current_day <= n: row = [0] * m for j in range(m): if current_day <= n: row[j] = current_day current_day += 1 grid.append(row) max_area = 0 num_rows = len(grid) # Перебор всех прямоугольников for r1 in range(num_rows): for c1 in range(m): for r2 in range(r1, num_rows): for c2 in range(c1, m): # Проверка прямоугольника is_valid = True for r in range(r1, r2 + 1): for c in range(c1, c2 + 1): if grid[r][c] == 0: is_valid = False break if not is_valid: break if is_valid: area = (r2 - r1 + 1) * (c2 - c1 + 1) if area > max_area: max_area = area print(max_area) ```

Другие решения

Что ещё задавали пользователи