Solução Informática Iniciante – Semana 69

por

Solução por Samyra Almeida

Conhecimento prévio necessário:

Bem, no início iremos adicionar na priority queue os $$N$$ caixas com tempo igual a $$0$$, pois nenhum dos mesmos realizou algum atendimento.

Note que, o $$i$$-ésimo cliente será atendido pelo primeiro caixa que ficar disponível, e como nossa priority queue ordena os tempos de atendimento dos caixas em ordem crescente, podemos concluir que o caixa que estiver no topo da fila sempre atenderá o $$i$$-ésimo cliente.

Com isso, para cada um dos clientes, basta tirarmos o caixa que está no topo da fila e primeiro checamos se ele fica “livre” antes do cliente chegar, ou seja, tempo do caixa é melhor que o tempo que o cliente chegou na fila. Se sim adiciono a diferença entre o tempo do cliente e o do caixa ao tempo do caixa. E depois checamos se a diferença entre o tempo do caixa e o tempo que o $$i$$-ésimo cliente chega na fila do banco é maior que $$20$$, se sim, incremento a resposta em uma unidade. Depois adiciono $$d$$ (duraçao do atendimento do $$i$$-ésimo cliente) ao tempo do caixa e o adiciono novamente a priority queue.

Ao final, basta imprimir a resposta.

Para maior compreensão leia o código-solução abaixo:

https://gist.github.com/samyravitoria/5297905b97bb13bb8c4e43ce0ca44226