Вопрос задан 27.01.2025 в 11:22. Предмет Информатика. Спрашивает Дмитриева Настя.

Помогите, пожалуйста, решить задачи.
1. В один из жарких летних дней Петя и его друг Вася решили купить арбуз. Они выбрали самый большой и самый спелый, на их взгляд. После недолгой процедуры взвешивания весы показали w килограмм. Поспешно прибежав домой, изнемогая от жажды, ребята начали делить приобретенную ягоду, однако перед ними встала нелегкая задача. Петя и Вася являются большими поклонниками четных чисел, поэтому хотят поделить арбуз так, чтобы доля каждого весила именно четное число килограмм, при этом не обязательно, чтобы доли были равными по величине. Ребята очень сильно устали и хотят скорее приступить к трапезе, поэтому Вы должны подсказать им, удастся ли поделить арбуз, учитывая их пожелание. Разумеется, каждому должен достаться кусок положительного веса.
Входные данные
В первой и единственной строке входных данных записано целое число w (1 ≤ w ≤ 100) — вес купленного ребятами арбуза.
Выходные данные
Выведите YES, если ребята смогут поделить арбуз на две части, каждая из которых весит четное число килограмм, и NO в противном случае.
Примечание
Например, ребята могут поделить арбуз на две части размерами 2 и 6 килограммов соответственно (другой вариант — две части 4 и 4 килограмма).

2. На клетчатой плоскости заданы координаты K зданий. Требуется построить кольцевую дорогу вокруг зданий минимальной длины в виде прямоугольника, со сторонами, параллельными линиям сетки.
Входные данные
Во входном файле, на первой строке, находится число K( ). На следующих K строках находятся пары чисел и – координаты зданий
( ).
Выходные данные
Выведите в выходной файл координаты левого нижнего и правого верхнего углов прямоугольника.

3. Хакер Иван является сотрудником крупной антивирусной компании. Один из вирусов исследованием, которого он занимается, был специально создан для атаки на программы биржевой торговли.
Для того что бы победить зловред Ване необходимо разработать алгоритм, который бы вычислил минимальное количество операций необходимых для того что бы пара чисел (a, b) стала "k -красивой". Пара чисел (a, b) называется "k-красивой" если хотя бы одно из чисел парны не меньше заданного целого числа k. При этом, операции, проводимые с парой чисел (a, b) могут быть только такие:
1. Пара (a, b) может быть преобразована в (a+b, b);
2. Пара (a, b) может быть преобразована в (a, b+a).
Помогите Ване победить.
Входные данные
Единственная строка входных данных содержит три целых числа a, b и k ( - 1018 ≤ x, y, m ≤ 1018).
Выходные данные
Выведите минимальное количество операций или число -1, если сделать заданную пару "k-красивой" невозможно.

4. Инженер-программист Надежда занимается разработкой компилятора для нового сверх секретного языка программирования. Для того чтобы закончить разработку одного из модулей ей остается решить задачу следующего содержания:
Во входных данных Надя получает строку содержащую в себе цифры и скобки одного вида: '(' и ')'. Наде необходимо написать программу, которая для любых входных данных определяет является ли содержащаяся в них скобочная последовательность правильной, и в случае правильности скобочной последовательности возвращает количество встречающихся в ней скобок, если же последовательность неправильная, то выводится число -1.
Скобочная последовательность называется правильной, если:
1. Пустая строка — правильная скобочная последовательность;
2. Правильная скобочная последовательность, взятая в скобки одного типа — правильная скобочная последовательность;
3. Правильная скобочная последовательность, к которой приписана слева или справа правильная скобочная последовательность — тоже правильная скобочная последовательность.
Помогите Наде в разработке компилятора для нового сверх секретного языка программирования.
Входные данные
Единственная строка конечной длины содержит цифры и скобки, длина строки не больше 1024 символов.
Выходные данные
Выведите количество скобок если скобочная последовательность правильная или число -1 если нет.

5. Маленький Вася научился считать сумму цифр для любого числа. Для любого числа, он считал сумму его цифр, затем тоже самое он делал с полученным в результате числом и так далее. Определите сколько раз Васе необходимо посчитать сумму, чтобы она стала цифрой.
Входные данные
Одна непустая строка с числом (0 Выходные данные
Одна строка, с числом.

Перейти к ответам

Ответы на вопрос

Отвечает Колесник Макс.

Разберём решения задач по очереди:


Задача 1: Деление арбуза

Условие: Петя и Вася хотят поделить арбуз весом ww килограмм на две части, при этом каждая часть должна весить чётное число килограмм. Также вес каждого куска должен быть положительным.

Решение: Чтобы арбуз можно было разделить на две части с чётными числами, вес арбуза ww должен удовлетворять двум условиям:

  1. ww — чётное число (поскольку только чётное число можно разложить на два чётных слагаемых).
  2. w>2w > 2 — если w=2w = 2, то мы не сможем разделить арбуз на две части с положительным чётным весом, так как единственный вариант — это 1 и 1 килограмм, что не подходит.

Таким образом, если ww — чётное и w>2w > 2, выводим "YES", иначе — "NO".

Пример кода:

python
w = int(input()) if w % 2 == 0 and w > 2: print("YES") else: print("NO")

Задача 2: Построение кольцевой дороги вокруг зданий

Условие: На плоскости задано KK зданий с координатами (x,y)(x, y). Требуется построить прямоугольник минимальной длины, который охватит все здания. Этот прямоугольник должен иметь стороны, параллельные осям координат.

Решение: Чтобы построить прямоугольник, охватывающий все здания, нужно:

  1. Найти минимальную и максимальную координаты xx среди всех зданий — они будут определять левую и правую границу прямоугольника.
  2. Найти минимальную и максимальную координаты yy — они будут определять нижнюю и верхнюю границу прямоугольника.

Таким образом, левый нижний угол прямоугольника будет с координатами (xmin,ymin)(x_{\text{min}}, y_{\text{min}}), а правый верхний угол — (xmax,ymax)(x_{\text{max}}, y_{\text{max}}).

Пример кода:

python
K = int(input()) x_coords = [] y_coords = []

for _ in range(K): x, y = map(int, input().split()) x_coords.append(x) y_coords.append(y)

x_min = min(x_coords) x_max = max(x_coords) y_min = min(y_coords) y_max = max(y_coords)

print(x_min, y_min, x_max, y_max)


Задача 3: "k-красивость" пары чисел

Условие: Имеется пара чисел (a,b)(a, b). Необходимо минимальное количество операций для того, чтобы хотя бы одно из чисел в паре стало не меньше kk. Допустимые операции:

  1. (a,b)(a+b,b)(a, b) \rightarrow (a+b, b)
  2. (a,b)(a,b+a)(a, b) \rightarrow (a, b+a)

Решение: Алгоритм может быть следующим:

  1. Пока оба числа меньше kk, применяем операцию, увеличивая меньшее из чисел (чтобы быстрее достигнуть kk). Например, если aba \leq b, заменяем aa на a+ba + b.
  2. Если одно из чисел достигло или превысило kk, останавливаемся и выводим количество операций.
  3. Если оба числа остаются меньше kk и операций больше не остаётся (числа не могут достичь kk), выводим "-1".

Пример кода:

python
a, b, k = map(int, input().split()) operations = 0

while a < k and b < k: if a < b: a += b else: b += a operations += 1

if operations > 100000: # Ограничение по числу операций для защиты от бесконечного цикла operations = -1 break

print(operations)


Задача 4: Проверка корректности скобочной последовательности

Условие: Дана строка, содержащая цифры и скобки одного типа — «(» и «)». Необходимо проверить, является ли последовательность скобок корректной.

Решение: Корректная скобочная последовательность удовлетворяет условиям:

  1. Количество открывающих скобок должно быть равно количеству закрывающих.
  2. В любом префиксе строки количество закрывающих скобок не должно превышать количество открывающих.

Алгоритм:

  1. Используем счётчик, который увеличивается на 1 при встрече «(» и уменьшается на 1 при встрече «)».
  2. Если в процессе подсчёта счётчик становится отрицательным — последовательность некорректна.
  3. Если в конце счётчик равен нулю — последовательность корректна, иначе — нет.

Пример кода:

python
s = input() balance = 0 correct = True

for char in s: if char == '(': balance += 1 elif char == ')': balance -= 1

if balance < 0: correct = False break

if balance == 0 and correct: print("YES") else: print("NO")


Эти решения помогут понять, как подходить к решению подобных задач, ориентируясь на основные условия корректности или требуемых минимальных значений.

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос