O Caso das Malas
Em janeiro de 2025, foi notícia um deputado ter sido
constituído arguido por suspeitas de furtar bagagens em aeroportos.
Dizem que, na casa de banho, escondia as malas furtadas dentro de outras de maior dimensão.
Não queremos resolver um caso de polícia, mas perceber como
esconder malas
pequenas em malas grandes, utilizando o menor número
possível das grandes, sem analisar orientações e re-orientações para as
encaixar.
As malas grandes são identificadas por inteiros consecutivos, a partir
de 1, assim
como as pequenas.
As malas grandes têm todas
capacidade . A
mala pequena ocupa unidades de capacidade,
para , sendo
, e todos inteiros.
O número de tipos de malas é igual ao número de valores
distintos.
Se desfizermos malas, isto é, se pudermos distribuir por várias malas
grandes, para conseguir que as malas grandes usadas, exceto talvez uma
delas, fiquem totalmente cheias, quantas malas
usaria uma tal arrumação fracionária ótima? É fácil calcular!
E, sem desfazer malas,
quantas malas grandes requer uma arrumação ótima (não
fracionária)? De certo, se
e forem grandes,
até o melhor programa pode demorar um
tempo excessivo para responder.
Para nos despacharmos, podemos tentar uma arrumação apressada em que, simplesmente, colocamos a
mala pequena na primeira grande em que ainda couber, depois
de termos escondido as malas numeradas de 1 a . Com sorte, tal
arrumação é tão
boa como a ótima ou, até, como a ótima fracionária, que é sempre a
que requer menos malas!
Se a fracionária requerer mais do que malas,
é óbvio que a apressada também falha assim como qualquer alternativa,
pois malas não bastariam nunca.
Tarefa
Escreva um programa que, dados inteiros, , , , , e ,
com , determina a
arrumação apressada, assumindo que não existem mais do que malas
grandes.
Se a arrumação apressada falhar, por requerer mais do
que malas, indica a primeira mala
que não consegue arrumar, escrevendo "Apressada falha para mala ".
Caso falhe ou suceda, calcula quantas malas requer uma arrumação
fracionária ótima, para ver se vale a pena tentar procurar uma arrumação ótima (não fracionária) ou se, até, já a tem.
Assim, deve calcular uma arrumação ótima só se ,
e não for óbvio que a arrumação apressada
é
ótima, sendo e os dois limites dados.
Para cada escolha para as malas a , a mala
pode ser colocada numa qualquer mala grande onde ainda
caiba. Para cada alternativa, deve procurar completar a arrumação das
restantes
de forma ótima.
Para não sucumbir por
exaustão, tem de ser
inteligente.
Se , isto é, se as malas e são do mesmo tipo, não as
permute, devendo ver se é melhor ficar na mesma mala que ou
numa das seguintes (até à mala grande).
E deve tentar
procurar arrumações (não fracionárias) que usem menos malas
do que a melhor arrumação já encontrada.
Não vale a pena tentar completar arrumações que não seriam melhores.
Input
A primeira linha do input tem cinco inteiros,
que são , , , e .
Segue-se uma linha com inteiros,
separados por espaços, sendo o valor que está na -ésima posição da linha
(para ).
Restrições
|
|
Número de malas pequenas |
|
|
Capacidade de cada mala grande |
|
|
Número de malas grandes disponíveis |
|
|
Capacidade ocupada pela mala pequena (para ) |
|
|
Número de tipos de malas pequenas |
|
|
Número máximo de tipos para procurar uma arrumação ótima |
|
|
Número máximo de malas pequenas para procurar uma arrumação ótima |
Output
O output é constituído por duas linhas.
Se
a arrumação apressada suceder:
-
A primeira linha tem
inteiros, separados por espaços, que indicam em que mala grande ficou
cada mala pequena nessa arrumação,
pela ordem em que as malas ocorrem no input;
-
A segunda linha tem a frase
"
Como fracionaria! ", se a arrumação apressada usar o mesmo
número de malas que a ótima fracionária;
senão, se e , terá
"Otima requer malas ",
com substituído pelo seu valor;
mas, se ou , terá "Boa arrumacao? ".
Se a arrumação apressada falhar:
-
A primeira linha tem "
Apressada falha para mala ",
com substituído pelo identificador da primeira mala que não pode
ser escondida;
-
A segunda linha tem "
Fracionaria requer malas ",
indicando . Se , e , terá ainda
" e otima ", sendo o
número que a arrumação ótima requer.
Exemplo 1
Input
9 12 9 9 9
7 6 4 4 4 3 3 3 2
Output
1 2 1 2 3 3 3 4 2
Otima requer 3 malas
Exemplo 2
Input
9 12 9 1 9
7 6 4 4 4 3 3 3 2
Output
1 2 1 2 3 3 3 4 2
Boa arrumacao?
Exemplo 3
Input
9 12 5 4 9
7 6 4 4 4 3 3 3 3
Output
1 2 1 2 3 3 3 4 4
Como fracionaria!
Exemplo 4
Input
9 12 3 5 9
7 6 4 4 4 3 3 3 2
Output
Apressada falha para mala 8
Fracionaria requer 3 malas e otima 3
Exemplo 5
Input
9 12 2 3 6
7 6 4 4 4 3 3 3 2
Output
Apressada falha para mala 5
Fracionaria requer 3 malas
Exemplo 6
Input
21 44 8 10 22
36 25 25 25 25 25 20 20 12 12 12 12 12 12 12 12 12 12 12 9 8
Output
Apressada falha para mala 17
Fracionaria requer 8 malas e otima 9
Exemplo 7
Input
21 44 21 10 22
36 25 25 25 25 25 20 20 12 12 12 12 12 12 12 12 12 12 12 9 8
Output
1 2 3 4 5 6 7 7 2 3 4 5 6 8 8 8 9 9 9 10 1
Otima requer 9 malas
ToPAS'2025
|