Решение задачи: дан список доливов (T_i, V_i); между доливами вода убывает со скоростью 1 л/ед. времени (не ниже 0). Нужно вернуть объём сразу после последнего долива.
Сигнатура:
main(input_data: str) -> str
В момент времени 0 в увлажнителе 0 литров воды.
Вы доливаете воду N раз. В i-й раз вы доливаете V_i литров в момент T_i.
Гарантируется: T_1 < T_2 < ... < T_N.
Пока в увлажнителе есть вода, её количество уменьшается со скоростью 1 литр за 1 единицу времени.
Количество воды не может стать отрицательным.
Нужно найти количество воды сразу после долива в момент T_N.
Храним текущий объём cur и время предыдущего долива prev_t.
Для каждого долива (t, v):
- уменьшаем объём на прошедшее время:
cur = max(0, cur - (t - prev_t)) - добавляем долив:
cur += v - обновляем
prev_t = t
- Время:
O(N) - Память:
O(1)(если обрабатывать пары на лету)
В текущей реализации пары сначала собираются в список, поэтому памятьO(N)— это нормально.
Тест 1
4
1 3
3 1
4 4
7 1
Выход: 3
Тест 2
3
1 8
10 11
21 5
Выход: 5
Тест 3
10
2 1
22 10
26 17
29 2
45 20
47 32
72 12
75 1
81 31
97 7
Выход: 57
src/
main.py
tests/
test_main.py
pyproject.toml
uv.lock
uv- Python (3.12+)
uv syncuv run pytest -quv run python -c "from src.main import main; print(main('''4\n1 3\n3 1\n4 4\n7 1\n'''))"Скопируй и вставь в GitHub → Settings → Topics:
python, atcoder, competitive-programming, algorithms, simulation, implementation, string-parsing, pytest, uv, clean-code, beginner-friendly, problem-solving, water, humidifier
Python-решение задачи AtCoder про увлажнитель: симуляция уровня воды между доливами за O(N), вход — многострочная строка, покрыто pytest-тестами.
Основные:
- AtCoder humidifier python solution
- задача AtCoder увлажнитель решение
- симуляция уровня воды python
Вспомогательные:
- парсинг многострочного ввода python
- pytest тесты функции
- алгоритм O(N) симуляция
LSI/семантика:
- дискретная симуляция
- инварианты
- edge cases
- max(0, x) ограничение снизу
- time delta
ПРЕДПОЛАГАЮ: лицензия пока не добавлена. Для публичного GitHub обычно выбирают MIT или Apache-2.0.