Паттерн facade даёт простой вход к сложной подсистеме. Вызов checkout в магазине скрывает две подсистемы: инвентарь и список цен.
Товары пронумерованы от 0 до n − 1. stock[i] — это количество единиц товара i в наличии, а prices[i] — его цена. Корзина — это список строк [item, quantity]; один и тот же товар может встречаться в нескольких строках.
checkout(stock, prices, cart) должен:
- Проверить инвентарь: если суммарное количество любого товара в корзине больше его запаса, заказ не проходит.
- Иначе вернуть общую стоимость корзины.
Реализуйте checkout_facade(stock, prices, cart).
Input
stock, prices: по n значений в каждом.
cart: строки [item, quantity].
Output
Верните общую стоимость, или -1, если для какого-либо товара не хватает запаса.
Ограничения
1 ≤ n ≤ 1,000
0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ строк корзины ≤ 1,000; 1 ≤ quantity ≤ 1,000
Примеры
Ввод:
cart = [
[0, 2],
[2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]
Ожидаемый вывод:
expected = 10
Ввод:
std::vector<std::vector<long long>> cart = {
{0, 2},
{2, 4}
};
std::vector<long long> stock = {5, 2, 10};
std::vector<long long> prices = {3, 20, 1};
Ожидаемый вывод:
long long expected = 10;
Ввод:
long[][] cart = new long[][] {
new long[] {0, 2},
new long[] {2, 4}
};
long[] stock = new long[] {5, 2, 10};
long[] prices = new long[] {3, 20, 1};
Ожидаемый вывод:
long expected = 10;
Пояснение
Оба товара есть в наличии. 2 × 3 + 4 × 1 = 10.
Ввод:
cart = [
[1, 1],
[1, 2]
]
stock = [5, 2]
prices = [3, 20]
Ожидаемый вывод:
expected = -1
Ввод:
std::vector<std::vector<long long>> cart = {
{1, 1},
{1, 2}
};
std::vector<long long> stock = {5, 2};
std::vector<long long> prices = {3, 20};
Ожидаемый вывод:
long long expected = -1;
Ввод:
long[][] cart = new long[][] {
new long[] {1, 1},
new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};
Ожидаемый вывод:
long expected = -1;
Пояснение
Товар 1 встречается дважды, всего 3 единицы, но в наличии только 2, поэтому заказ не проходит: -1.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Сначала сложите количество каждого товара по всем строкам корзины.
Подсказка 2
Сравните эти суммы с наличием до расчёта любой цены.
Подсказка 3
Если какого-то товара не хватает, сразу верните -1.
Ожидаемая сложность
время O(n + строк корзины), доп. память O(n)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.