O restaurante Don Helder é o maior sucesso gastronômico da cidade. Ele
não aceita reservas, pois seu movimento é muito grande e ele enche a casa todos
os dias. Consequentemente, a fila de espera é enorme.
Observando a dificuldade que os seus funcionários têm em organizar essa
fila toda, a proprietária contratou você para desenvolver um sistema que auxilie
no gerenciamento da fila, otimizando o uso das mesas e reduzindo o tempo de
espera dos clientes no geral.
Então, dado o número de pessoas em cada grupo à espera de uma mesa,
assim como sua ordem de chegada e quantas pessoas cada mesa do salão
comporta, sua missão é indicar que grupo deve ser colocado em qual mesa para
otimizar o atendimento.
Considere que as mesas do restaurante são fixadas ao chão, ou seja, não é
possível juntá-las nem separá-las. Logo, a capacidade do restaurante é de 150
pessoas, distribuídas em:
- 10 mesas de 2 pessoas – mesas de 1 a 10
- 15 mesas de 4 pessoas – mesas de 11 a 25
- 5 mesas de 6 pessoas – mesas de 26 a 30
- 5 mesas de 8 pessoas – mesas de 31 a 35
Cada grupo de pessoas que vai ao restaurante deseja sentar junto, e
portanto os grupos possuem no máximo 8 pessoas. Assim, você não pode dividir
um mesmo grupo em mais de uma mesa, nem deve colocar mais de um grupo em
uma mesma mesa.
O serviço no restaurante também é diferenciado, feito em rodadas.
Quando não for possível colocar mais pessoas nas mesas (seja porque todas as
mesas estão ocupadas, ou porque as mesas vazias não comportam os grupos em
espera), é realizado o atendimento de todas as mesas ao mesmo tempo, ou seja,
uma rodada. Isso faz com que os clientes também terminem suas refeições
juntos, e liberem as mesas para os próximos clientes, para que uma nova rodada
se inicie.
Desenvolva então um algoritmo para gerenciar a fila de espera do
restaurante, implementando sua solução em Java. Observe que a forma como
organizar sua fila irá influenciar diretamente na quantidade de rodadas
necessárias para atender todos os clientes, e portanto sua tarefa é tentar reduzir
essa espera ao máximo.
Seu programa deve exibir a cada rodada a indicação de qual grupo deve
ser colocado em cada mesa, e ao final, indicar quantas rodadas foram necessárias
para atender todos os clientes.
Cada grupo na espera é representado por uma id (sequencial, de acordo
com a ordem de chegada), e seu tamanho (de 1 a 8, indicando quantas pessoas
fazem parte do grupo). As mesas são representadas pelo seu número, conforme
descrito acima.