Skip to content

Дан список доливов воды `(T_i, V_i)`; между доливами вода убывает со скоростью `1 л/ед. времени` (не ниже `0`). Нужно вернуть объём сразу после последнего долива.

Notifications You must be signed in to change notification settings

EPoY74/waterAtCoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WaterAtCoder — увлажнитель (AtCoder) — Python + uv

Решение задачи: дан список доливов (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)

Требования

  • uv
  • Python (3.12+)

Установка зависимостей

uv sync

Запуск тестов

uv run pytest -q

Быстрая проверка функции

uv run python -c "from src.main import main; print(main('''4\n1 3\n3 1\n4 4\n7 1\n'''))"

GitHub Topics (тэги репозитория)

Скопируй и вставь в GitHub → Settings → Topics:

python, atcoder, competitive-programming, algorithms, simulation, implementation, string-parsing, pytest, uv, clean-code, beginner-friendly, problem-solving, water, humidifier


Короткое описание (About)

Python-решение задачи AtCoder про увлажнитель: симуляция уровня воды между доливами за O(N), вход — многострочная строка, покрыто pytest-тестами.


SEO-ключи (для README/поиска)

Основные:

  • AtCoder humidifier python solution
  • задача AtCoder увлажнитель решение
  • симуляция уровня воды python

Вспомогательные:

  • парсинг многострочного ввода python
  • pytest тесты функции
  • алгоритм O(N) симуляция

LSI/семантика:

  • дискретная симуляция
  • инварианты
  • edge cases
  • max(0, x) ограничение снизу
  • time delta

LICENSE

ПРЕДПОЛАГАЮ: лицензия пока не добавлена. Для публичного GitHub обычно выбирают MIT или Apache-2.0.

About

Дан список доливов воды `(T_i, V_i)`; между доливами вода убывает со скоростью `1 л/ед. времени` (не ниже `0`). Нужно вернуть объём сразу после последнего долива.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages