[ED095] Quartel de Bombeiros

Neste problema deverá submeter uma classe ED095 contendo um programa completo para resolver o problema (ou seja, com o método main).
Pode assumir que no Mooshak terá acesso às classes de listas, pilhas e filas como dadas nas aulas (ou seja, não precisa de as incluir no código submetido).


O problema

A boa gestão de pessoal num quartel de bombeiros é crucial para garantir o melhor serviço possível à população em geral. Devido ao reduzido número de bombeiros por quartel, estes profissionais acumulam horas de trabalho que, no geral, são excessivamente cansativas, e raramente têm tempo suficiente para descansar entre cada evento a que são chamados a intervir.

Para tal foi-lhe atribuída a tarefa de proporcionar uma ferramenta de gestão de pessoal durante um dia de trabalho, com o objectivo de gerir o descanso dos bombeiro do quartel. A estratégia de gestão do descanso é muito simples e consiste em manter uma fila com os bombeiros aptos a trabalhar. Quando surge um novo evento, os primeiros bombeiros da fila são os chamados e associados à execução desse evento, deixando desse modo de constar na fila de livres. Quando o evento termina são novamente colocados na fila, passando novamente ao estado de aptos para serem chamados para novo evento. O uso de uma fila de bombeiros livres (ou aptos a responderem à chamada) garante ordem e sobretudo garante que os próximos a serem chamados serão os que estão em descanso há mais tempo.

Além do escalonamento de bombeiros para eventos que vão surgindo, a ferramenta deverá também fornecer estatísticas diárias, por exemplo, saber quais os eventos que aconteceram ao longo do dia, se houve algum evento em que não tenha havido bombeiros suficientes para o satisfazer, ou ainda saber em quantos eventos um bombeiro participou e quantas horas é que cada bombeiro esteve em ação.

Input

O input inclui informação sobre os bombeiros existentes no quartel e a simulação de ocorrência dos eventos. Os dados são apresentados da seguinte forma:

Notar que os eventos aparecem no input ordenados por hora, mas a ordem pelo qual terminam não é garantida, i.e. podemos ter eventos que começaram depois de outros e que terminam antes. Por exemplo, podemos ter uma sequência como a seguinte:

  
PARTIDA 1 3 620
PARTIDA 2 5 950
CHEGADA 1 860
PARTIDA 3 6 1000
CHEGADA 3 1050
CHEGADA 2 1230
FIM

Output

Se flag==1, deverá apresentar o número de eventos que ocorreram. O output deverá ser Ocorreram N eventos onde N é o valor calculado. (valorização: 20%)

Se flag==2, deverá apresentar os nomes dos bombeiros destacados para cada evento (note se quando acontecer um evento não tiver o número suficiente de bombeiros no quartel, deve alocar o máximo possível, ou seja, todo os bombeiros no quartel).
Numa primeira linha deve escrever a mensagem Bombeiros Destacados, seguindo-se para cada evento (por ordem crescente do identificador), uma linha com EVENTO E, em que E é o identificador do evento, e nas linhas seguintes os nomes de cada bombeiro destacado para o evento, um por linha, pela ordem que estavam na fila do quartel. Se num dado evento não tiver sido destacado nenhum bombeiro, o output deverá ser a mensagem Nenhum. (valorização: 45%)

Se flag==3, deverá apresentar uma listagem com todos os bombeiros. Numa primeira linha deve escrever a mensgem Listagem de Bombeiros, seguindo-se a informação de cada bombeiro, um por linha, mostrando-se o nome, o número de eventos em que participou, e o número de minutos que trabalhou. Se não trabalhou nenhum minuto, deve aparecer "0". Os bombeiros deve vir pela ordem em que estão na fila do quartel no final de processados todos os eventos.(valorização: 35%)

Input

Output

1
4
Pedro
Luis
Antonio
Joana
PARTIDA 1 2 920
PARTIDA 2 1 930
CHEGADA 2 1000
CHEGADA 1 1015
PARTIDA 3 5 1232
PARTIDA 4 2 1500
CHEGADA 3 1605
CHEGADA 4 1630
PARTIDA 5 3 2120
CHEGADA 5 2310
FIM
Ocorreram 5 eventos

Input

Output

2
4
Pedro
Luis
Antonio
Joana
PARTIDA 1 2 920
PARTIDA 2 1 930
CHEGADA 2 1000
CHEGADA 1 1015
PARTIDA 3 5 1232
PARTIDA 4 2 1500
CHEGADA 3 1605
CHEGADA 4 1630
PARTIDA 5 3 2120
CHEGADA 5 2310
FIM
Bombeiros Destacados
EVENTO 1
Pedro
Luis
EVENTO 2
Antonio
EVENTO 3
Joana
Antonio
Pedro
Luis
EVENTO 4
Nenhum
EVENTO 5
Joana
Antonio
Pedro

Input

Output

3
4
Pedro
Luis
Antonio
Joana
PARTIDA 1 2 920
PARTIDA 2 1 930
CHEGADA 2 1000
CHEGADA 1 1015
PARTIDA 3 5 1232
PARTIDA 4 2 1500
CHEGADA 3 1605
CHEGADA 4 1630
PARTIDA 5 3 2120
CHEGADA 5 2310
FIM
Listagem de Bombeiros
Luis 2 468
Joana 2 563
Antonio 3 633
Pedro 3 658

Última actualização:
Adaptado do enunciado original de Fernando Silva (DCC/FCUP)