Para efeitos da nota atribuida à resolução de exercícios ao longo do semestre - Submeter até 23:59 de 15 de Maio
(o problema continuará depois disponível para submissão, mas sem contar para a nota)
[para perceber o contexto do problema deve ler o guião da aula #08]
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).
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.
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
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 |
Estruturas de Dados (CC1007)
DCC/FCUP - Faculdade de Ciências da Universidade do Porto