Problema
O padrão facade fornece um ponto de entrada simples para um subsistema complicado. A chamada checkout de uma loja esconde dois subsistemas: o estoque e a lista de preços.
Os itens são numerados de 0 até n − 1. stock[i] é quantas unidades do item i estão disponíveis e prices[i] é seu preço. O carrinho é uma lista de linhas [item, quantity]; o mesmo item pode aparecer em várias linhas.
checkout(stock, prices, cart) deve:
- Verificar o estoque: se a quantidade total de qualquer item no carrinho for maior do que seu estoque, o pedido falha.
- Caso contrário, retornar o preço total do carrinho.
Implemente checkout_facade(stock, prices, cart).
Input
stock, prices: n valores cada.
cart: linhas [item, quantity].
Output
Retorne o preço total, ou -1 se qualquer item não tiver estoque suficiente.
Restrições
1 ≤ n ≤ 1,000
0 ≤ stock[i], prices[i] ≤ 100,000; 0 ≤ linhas do carrinho ≤ 1,000; 1 ≤ quantity ≤ 1,000
Exemplos
Entrada:
cart = [
[0, 2],
[2, 4]
]
stock = [5, 2, 10]
prices = [3, 20, 1]
Saída esperada:
expected = 10
Entrada:
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};
Saída esperada:
long long expected = 10;
Entrada:
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};
Saída esperada:
long expected = 10;
Explicação
Ambos os itens estão em estoque. 2 × 3 + 4 × 1 = 10.
Entrada:
cart = [
[1, 1],
[1, 2]
]
stock = [5, 2]
prices = [3, 20]
Saída esperada:
expected = -1
Entrada:
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};
Saída esperada:
long long expected = -1;
Entrada:
long[][] cart = new long[][] {
new long[] {1, 1},
new long[] {1, 2}
};
long[] stock = new long[] {5, 2};
long[] prices = new long[] {3, 20};
Saída esperada:
long expected = -1;
Explicação
O item 1 aparece duas vezes para um total de 3 unidades, mas apenas 2 estão em estoque, então o pedido falha: -1.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Some primeiro a quantidade de cada item em todas as linhas do carrinho.
Dica 2
Compare esses totais com o estoque antes de calcular qualquer preço.
Dica 3
Se faltar algum item, retorne -1 na hora.
Complexidade esperada
tempo O(n + linhas do carrinho), espaço extra O(n)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.