EduBrick
классная работа

Разбор: Доставка

← Школьный этап — осень 2026

0/1решено 0 из 1до зачёта осталось 1

Условие

Склад находится в точке 0 прямой дороги. В посёлок x нужно доставить неделимый контейнер массы a, в посёлок y — контейнер массы b. Дрон за рейс перевозит не более m килограммов и пролетает не более d километров. Каждый рейс начинается и заканчивается на складе. Все контейнеры загружаются до вылета; дозагрузка и зарядка во время рейса запрещены, в том числе при пролёте через склад. Перед новым рейсом заряд восстанавливается. За рейс можно доставить один или оба контейнера. Найдите минимальное число рейсов или выведите −1, если доставка невозможна. Расстояние между u и v равно |u − v|.

Входные данные

Шесть целых чисел, каждое на отдельной строке: x, y, a, b, m, d. −5·10^8 ≤ x,y ≤ 5·10^8; x ≠ 0, y ≠ 0, x ≠ y; 1 ≤ a,b,m ≤ 10^9; 1 ≤ d ≤ 2·10^9.

Что вывести

Выведите одно целое число — ответ на задачу.

Как понимать условие

Контейнер нельзя разделить на части. Ограничение m относится к общей массе груза при вылете, а d — ко всему пути вместе с возвращением. Например, при x = 2, y = 5, a = 3, b = 4, m = 7 и d = 10 дрон берёт оба контейнера и летит 0 → 2 → 5 → 0. Масса равна 7, длина маршрута — 2 + 3 + 5 = 10. Ответ равен 1. Если посёлки окажутся по разные стороны склада, путь между ними станет длиннее.

теория

Сколько вариантов нужно проверить

Контейнеров всего два. Ответ может быть −1, 1 или 2. Сначала выясним, можно ли доставить каждый контейнер отдельно: a ≤ m, b ≤ m, 2|x| ≤ d, 2|y| ≤ d.

Если хотя бы одно условие нарушено, ответ −1. Совместный рейс не поможет: дополнительный груз не уменьшает массу, а посещение второго посёлка не сокращает путь до первого и обратно.

тест

Проверьте рассуждение

Посёлки находятся в −2 и 5, массы равны 3 и 4, m = 7, d = 10. Сколько рейсов нужно?

Войдите, чтобы ответить.
теория

Длина совместного рейса

Маршрут 0 → x → y → 0 имеет длину |x| + |x − y| + |y|. Обратный порядок даёт ту же сумму. Для посёлков по одну сторону склада это удвоенная дальняя координата по модулю; по разные стороны — удвоенная сумма модулей.

Если a + b ≤ m и длина маршрута ≤ d, ответ 1. Иначе, после проверки отдельных доставок, ответ 2. Других вариантов разделения двух неделимых контейнеров нет. Время и память — O(1).

теория

Почему нельзя зарядиться по дороге

При x < 0 < y маршрут проходит через склад, но условие запрещает зарядку и дозагрузку внутри рейса. В примере −2 и 5 общий маршрут имеет длину 14, хотя отдельным рейсам хватает 4 и 10 километров.

Сравнения включают равенство. Для сумм масс и длин в C++ нужен long long: сумма отдельных слагаемых может выйти за границу int.

теория

Реализация на Python

x = int(input())
y = int(input())
a = int(input())
b = int(input())
m = int(input())
d = int(input())
if a > m or b > m or 2 * abs(x) > d or 2 * abs(y) > d:
    print(-1)
elif a + b <= m and abs(x) + abs(x - y) + abs(y) <= d:
    print(1)
else:
    print(2)
теория

Реализация на C++17

#include <bits/stdc++.h>
using namespace std;
int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr);
    long long x,y,a,b,m,d; cin >> x >> y >> a >> b >> m >> d;
    if (a>m || b>m || 2*abs(x)>d || 2*abs(y)>d) cout << -1;
    else if (a+b<=m && abs(x)+abs(x-y)+abs(y)<=d) cout << 1;
    else cout << 2;
}
лестница задач
Разминкаприём в чистом виде · 1 балл0 из 1
·Доставка