Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3528631
А
Аноним
07 декабря 2025 10:38 · публичный вопрос
А
Аноним

Эмилия с друзьями играют в игру. У неё n монет. Сейчас её ход. Результат зависит от того, кого Эмилия «встретит» на игровом поле. Если Соню, та даст ей монету. Если Васю, то Вася…

Запрос пользователя

Эмилия с друзьями играют в игру. У неё n монет. Сейчас её ход. Результат зависит от того, кого Эмилия «встретит» на игровом поле. Если Соню, та даст ей монету. Если Васю, то Вася «украдет» у Эмилии половину монет. Если эта половина — не целое число, то Вася округляет его вниз. Например, если у Эмилии три монеты, Вася украдёт одну. Если Макса, то он купит у нее доспехи и заплатит вдвое больше монет, чем есть у Эмилии. Дано начальное количество монет n и имя того, кого встретила Эмилия. Выведите, сколько монет у неё после встречи. напиши код на пайтон

Ответ нейросети
07 декабря 2025 10:38

Решение задачи (пошагово)

  • Правила встречи:
    • Соня: 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 и имя встреченного персонажа.
  • Приводим имя к нижнему регистру и сравниваем с поддерживаемыми вариантами: соня, вася, макс.
  • В зависимости от имени корректируем количество монет по формулам выше и выводим результат.