Задача Задача №3528631
А
А
Решение задачи (пошагово)
- Правила встречи:
- Соня: Emily получает 1 монету -> n становится n + 1.
- Вася: у Эмилии украдут половину монет (floor(n/2) монет). После этого останется n - floor(n/2) = ceil(n/2) монет.
- Макс: он заплатит Эмилии двойной стоимостью её монет, т.е. добавит ей 2n монет. После этого станет n + 2n = 3n.
- Поэтому при вводе n и имени встретившегося персонажа новое количество монет равно:
- Соня: n -> n + 1
- Вася: n -> (n + 1) // 2
- Макс: n -> 3n
- Код учитывает возможные варианты написания имён и работает за константное время O(1).
Пример:
- Ввод: 3 Соня -> 3 + 1 = 4
- Ввод: 5 Вася -> (5 + 1) // 2 = 3
- Ввод: 2 Макс -> 3 * 2 = 6
Код на Python
import sys
def solve():
text = sys.stdin.read().strip()
if not text:
return
tokens = text.split()
n = None
idx = None
# Найдем первое целое число в потоке и возьмем следующий токен как имя
for i, t in enumerate(tokens):
try:
n = int(t)
idx = i
break
except ValueError:
continue
if n is None:
# Нет числа — нечего вычислять
print()
return
name = tokens[idx + 1] if idx + 1 < len(tokens) else ""
# Очистим имя от возможной пунктуации и приведём к нижнему регистру
clean_name = ''.join(ch for ch in name if ch.isalpha()).lower()
# Определяем персонажа
if clean_name in {"соня", "sonya", "sonia"}:
result = n + 1
elif clean_name in {"вася", "vasya", "vasja"}:
result = (n + 1) // 2
elif clean_name in {"макс", "max", "maxim"}:
result = 3 * n
else:
# В задаче ожидаются три варианта, но на всякий случай оставим безопасное поведение.
result = n
print(result)
if __name__ == "__main__":
solve()
Как это работает
- Считываем вход, ищем первое целое число n и имя встреченного персонажа.
- Приводим имя к нижнему регистру и сравниваем с поддерживаемыми вариантами: соня, вася, макс.
- В зависимости от имени корректируем количество монет по формулам выше и выводим результат.