[ED115] Às compras no supermercado

Neste problema deverá submeter uma classe ED115 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

Um supermercado possui N caixas de pagamento, numeradas consecutivamente de 1 a N. Cada uma destas caixas possui uma fila de clientes, sendo que no início todas as filas estão vazias.

C clientes estão a efectuar compras neste supermercado. Cada cliente é identificado por um nome, um tempo de chegada (em segundos) às caixas e número de produtos para pagar. Assim que um cliente chega à zona das caixas para pagar, ele escolhe a caixa que possui a fila com menos clientes e, em caso de empate, aquela em que o último cliente da fila tem o menor número de produtos. Se mesmo assim persistir um empate, deve escolher a fila com o menor número de ordem.

Um cliente com P produtos demora 10 + P*Ki segundos a ser atendido na caixa i, onde Ki é uma constante que define quantos segundos o operador da caixa i demora a processar um único produto, e 10 é o tempo constante necessário para o cliente proceder ao pagamento.

Se num mesmo segundo chega um cliente e um outro acaba as suas compras, deve processar primeiro o cliente que chega e só depois considerar o que termina.

Input

A primeira linha do input contém o valor de uma flag que pode tomar os valores 1 ou 2. Este valor indica qual a subtarefa que deve resolver.

A segunda linha contém um inteiro N, o número de caixas a considerar. A terceira linha contém N inteiros separados por um espaço, sendo que o i-ésimo inteiro da linha representa Ki, a rapidez de atendimento da caixa i.

A quarta linha contém um inteiro C, o número de clientes. Seguem-se C linhas, cada uma contendo a descrição de um cliente no formato "NOME SEGUNDO_CHEGADA NUMERO_PRODUTOS", onde NOME, é uma sequência contíguas de caracteres (sem espaços) e SEGUNDO_CHEGADA e NUMERO_PRODUTOS números inteiros indicando respectivamente o segundo de chegada e o número de produtos do cliente. É garantido que os clientes vêm no input por ordem estritamente crescente do segundo de chegada.

Output

O output depende do valor da flag dada no input:

No caso do valor da flag ser 1, pode assumir que apenas existirá uma caixa no supermercado. Devem ser escritas C linhas, uma por cada cliente, no formato "NOME TEMPO_CHEGADA TEMPO_SAIDA", onde o TEMPO_SAIDA é o segundo onde o cliente termina o seu atendimento.

No caso do valor da flag ser 2, deve escrever N linhas, uma por cada caixa. Cada uma destas linhas deve vir no formato "Caixa #i NUM_CLIENTES TOTAL_PRODUTOS", onde i é o número de ordem da caixa, NUM_CLIENTES é o número total de clientes atendidos nessa caixa e TOTAL_PRODUTOS é o número total de produtos desses mesmos clientes.

Exemplos de Input/Output:

InputOutput
1
1
2
3
Renata 12 4
Ana 25 1
Matilde 45 4
Renata 12 30
Ana 25 42
Matilde 45 63

InputOutput
2
3
1 1 1
6
Eduardo 5 4
Kyara 11 3
Rafaela 14 5
Nuria 18 5
Lucas 19 3
Barbara 28 4
Caixa #1: 3 11
Caixa #2: 2 8
Caixa #3: 1 5

Última actualização: