• Nenhum resultado encontrado

Lista de Exercícios 09

N/A
N/A
Protected

Academic year: 2021

Share "Lista de Exercícios 09"

Copied!
10
0
0

Texto

(1)

Universidade Federal de Ouro Preto – UFOP

Instituto de Ciências Exatas e Biológicas – ICEB

Departamento de Computação – DECOM

Disciplina: Algoritmos e Programação Avançada

Professores: Marco Antonio M. Carvalho

Túlio Ângelo M. Toffolo

Lista de Exercícios 09

Instruções

• Todos os exercícios que envolvem programas devem ser resolvidos através de programas; • Na solução dos exercícios, devem ser utilizados os conceitos listados no cabeçalho desta lista;

• Para cada exercício, deve ser criado um arquivo com nome “Nome_ListaX_ExeY.c”, em que Nome

denota o nome do aluno, X denota o número da lista de exercícios e Y denota o número do exercício;

• Os códigos fonte deverão ser primeiramente submetidos ao Uva, e após serem aceitos, devem ser

entregues através do Moodle, sem zipar;

• Códigos copiados ou tentativas de trapaça acarretam em perda total da lista de exercícios; • Eventuais dúvidas podem ser sanadas com o professor;

• A data da entrega é até o início da próxima aula prática.

Making Change

ID: 166

Dada uma quantia em dinheiro e um número (quase) ilimitado de moedas (ignoraremos notas neste problema), sabemos que uma quantia em dinheiro pode ser formada de diversas maneiras. Um problema mais interessante surge quando bens são comprados e pagos, com a possibilidade de troco ser necessário. Dados os recursos finitos da maioria das carteiras hoje em dia, somos restritos na quantidade de formas em que podemos formar uma quantia para pagar nossas contas – assumindo em primeiro lugar que podemos formar tal quantia, mas isto é outra história.

O problema em que estaremos preocupados será minimizar o número de moedas que trocam de mão em cada transação, dado que o caixa possui um suprimento adequado de moedas. (O conjunto de moedas da Nova Zelândia possui as moedas de 5c, 10c, 20c, 50c, $1 e $2.). Portanto, se precisamos pagar 55c e não possuímos uma moeda de 50c, poderíamos pagar como 2*20c + 10c + 5c com um total de 4 moedas. Se oferecermos $1, receberemos 45c de troco que também envolve 4 moedas, mas se oferecermos $1.05 ($1 + 5c), teremos 50c de troco, e o número total de moedas que trocam de mão são apenas 3.

Escreva um programa que lerá os recursos disponíveis para você, o total da compra e determinará o número mínimo de moedas que troca de mãos.

Entrada

A entrada consistirá de uma série de linhas, cada uma definindo uma situação diferente. Cada linha consistirá de 6 inteiros representando os números das moedas disponíveis na ordem dada acima, seguida por um número real representando o valor da transação, que sempre será menor que $5.00. O arquivo será terminado por seis zeros (0 0 0 0 0 0). O valor total das moedas será sempre suficiente para formar a quantia e a quantia sempre será viável, ou seja, sempre será um múltiplo de 5c.

(2)

Saída

A saída consistirá de uma série de linhas, uma para cada situação definida na entrada. Cada linha consistirá do número mínimo de moedas que troca de mãos, alinhado à direita em um campo com 3 caracteres de largura.

Exemplo de Entrada Exemplo de Saída

2 4 2 2 1 0 0.95 2 4 2 0 1 0 0.55 0 0 0 0 0 0 2 3

(3)

Work Reduction

ID: 10670

A papelada está começando a se empilhar em sua mesa, e as tensões no ambiente de trabalho estão começando a aumentar. Seu chefe te ameaçou com demissão se você não tiver nenhum progresso até o fim do dia. Você atualmente possui N unidades de trabalho em sua mesa, e seu chefe exige que você tenha exatamente M unidades de trabalho por fazer até o final do dia.

A única salvação para você agora é contratar ajuda. Existem várias agências que oferecem planos de redução de papelada:

Por $A elas reduzirão seu trabalho em uma unidade.

Por $B elas reduzirão seu trabalho total pela metade (arredondando para baixo quando necessário). Note que seu trabalho nunca poderá ser reduzido para menos que 0.

Sua tarefa agora é produzir uma tabela ordenada de nomes de agências e o respectivo custo mínimo para que elas resolvam seu problema de carga de trabalho.

Entrada

A primeira linha da entrada consiste de um único inteiro positivo, representando o número de casos a seguir. Cada caso começa com três inteiros positivos separados por espaços: N – sua carga de trabalho inicial, M - sua carga de trabalho objetivo e L – o número de agências redutoras de trabalho disponíveis para você, (1<=M<=N<=100000, 1<=L<=100). As próximas L linhas têm o formato “[nome da agência]: A, B”, em que A e B são os custos como descrito acima para a dada agência (0<=A, B<=10000). O comprimento do nome da agência será entre 1 e 16, e consistirá apenas de letras maiúsculas. Os nomes de agências serão únicos.

Saída

Para cada caso de teste, imprima “Case X”, com X sendo o número do caso, em uma linha sozinha, seguida pela tabela de nomes das agências e os respectivos custos mínimos, ordenados de forma não decrescente de custo mínimo. Ordene agências com custos mínimos iguais em ordem alfabética. Para cada linha da tabela, imprima o nome da agência, seguido por um espaço, seguido pelo custo mínimo exigido para aquela agência resolver seu problema.

Exemplo de Entrada Exemplo de Saída

100 5 3 A:1,10 B:2,5 C:3,1 1123 1122 5 B:50,300 A:1,1000 C:10,10 D:1,50 E:0,0 Case 1 C 7 B 22 A 37 Case 2 E 0 A 1 D 1 C 10 B 50

(4)

Minimal Coverage

ID: 10020

Dados vários segmentos de linha (no eixo X), com coordenadas [L1, R1], você deve escolher a menor

quantidade deles, tal que eles completamente cobrem o segmento [0, M].

Entrada

A primeira linha é o número de casos de testes, seguidas por uma linha em branco.

Cada caso de teste deve conter um inteiro M (1<=M<=5000), seguido pelos pares “Li, Ri” (|Li|, |Ri|<=50000,

i<100000), cada um em uma linha separada. Cada caso de teste da entrada é terminado pelo par “0 0”. Cada caso de teste será separado por uma linha em branco.

Saída

Para cada caso de teste, na primeira linha da saída seu programa deve imprimir o número mínimo de segmentos de linha que podem cobrir o segmento [0, M]. Nas linhas seguintes, as coordenadas dos segmentos, ordenados por suas extremidades esquerdas (Li), devem ser impressas no mesmo formato que a entrada. O par “0 0” não deve ser impresso. Se [0, M] não puder ser coberto pelos segmentos de linha dados, seu programa deve imprimir “0” (sem as aspas).

Imprima uma linha em branco entre as saídas de dois casos de teste consecutivos.

Exemplo de Entrada Exemplo de Saída

2 1 -1 0 -5 -3 2 5 0 0 1 -1 0 0 1 0 0 0 1 0 1

(5)

Shoemaker’s Problem

ID: 10026

Um sapateiro possui N tarefas (compras dos compradores) as quais ele deve cumprir. O sapateiro só trabalha em uma tarefa por dia. Para cada i-ésima tarefa, é conhecido o inteiro Ti (1<=Ti<=1000), o tempo em dias que o sapateiro levará para terminar a tarefa. Para cada dia de atraso antes de começar a i-ésima tarefa, o sapateiro deve pagar uma multa de Si (1<=Si<=10000) centavos. Sua tarefa é ajudar o sapateiro, escrevendo um programa para encontrar uma sequência de tarefas com menor multa total.

Entrada

A entrada começa com um único positivo inteiro em uma linha sozinho, indicando o número de casos a seguir, cada um como descrito abaixo. Esta linha é seguida por uma linha em branco, e também há uma linha em branco entre duas entradas consecutivas.

A primeira linha da entrada começa com um inteiro N (1<=N<=1000). As próximas N linhas contêm dois números cada, o tempo e a multa de cada tarefa.

Saída

Para cada caso de teste, a saída deve seguir a descrição abaixo. As saídas de dois casos consecutivos serão separadas por uma linha em branco.

Seu programa deve imprimir a sequência de tarefas com multa mínima. Cada tarefa deve ser representada por seu número da entrada. Todos os inteiros devem ser colocados em apenas uma linha de saída e separados por um espaço. Se múltiplas soluções são possíveis, imprima a primeira lexicograficamente.

Exemplo de Entrada Exemplo de Saída

1 4 3 4 1 1000 2 2 5 5 2 1 3 4

(6)

Advertisement

ID: 10148

O departamento de recreação decidiu que deveria ser mais lucrativo, e que vender espaço de propaganda ao longo da popular pista de corrida no parque local. Eles construíram vários letreiros (placas especiais para propagandas) ao longo da pista e decidiram vender o espaço nestes letreiros. Os letreiros são situados uniformemente ao longo da pista de corrida, e a eles são dados números consecutivos correspondentes à sua ordem ao logo da pista. No máximo uma propaganda pode ser colocada em cada letreiro.

Um cliente em particular deseja comprar espaço para propaganda nestes letreiros, mas precisa garantir que cada corredor verá sua propaganda pelo menos K vezes enquanto estiver correndo na pista. Porém, diferentes corredores correm em diferentes partes da pista.

Entrevistas com os corredores revelaram que cada um deles escolheu uma seção da pista que gosta de correr todos os dias. Uma vez que os anunciantes se preocupam apenas com os letreiros vistos pelos corredores, cada seção pessoal de um corredor pode ser identificada pelos letreiros vistos durante uma corrida. Levando em consideração que os letreiros são enumerados sequencialmente, é suficiente registrar os números do primeiro e último letreiros vistos pelos corredores.

Infelizmente, algumas entrevistas também mostraram que alguns corredores não correm o suficiente para ver K letreiros. Alguns deles estão em tão má forma que conseguem ver apenas um letreiro (neste caso, os números do primeiro e último letreiros são os mesmos). Uma vez que corredores fora de forma não verão K letreiros, o anunciante exige que eles vejam uma propaganda em cada letreiro ao longo de sua seção da pista. Apesar de não ser tão bom quanto eles verem K propagandas, isto é o melhor que pode ser feito e é suficiente para satisfazer o anunciante.

Para diminuir o custo das propagandas, o anunciante te contrata para descobrir como minimizar o número de letreiros que ele precisa pagar e, ao mesmo tempo, satisfazer as exigências.

Entrada

A primeira linha da cada caso de teste contém dois inteiros K e N (1<=K, N<1000) separados por um espaço. K é o número mínimo de propagandas que cada corredor deve ver e N é o número total de corredores.

As próximas N linhas descrevem a seção de pista de cada corredor. Cada linha contém dois inteiros Ai e Bi (ambos os números não maiores que 10000 por valor absoluto). Ai representa o número do primeiro letreiro visto pelo corredor número i e Bi representa o número do último letreiro visto pelo mesmo corredor. Durante uma corrida, o corredor i verá os letreiros Ai, Bi, e todos os que estiverem entre eles.

Saída

Na primeira linha da saída para cada caso de teste, escreva um único inteiro M. Este número representa o número mínimo de propagandas que devem ser colocadas a fim de satisfazer as exigências do anunciante. Então escreva M linhas com um número em cada linha. Estes números representam (em ordem crescente) os números dos letreiros em que as propagandas do anunciante devem ser colocadas. Imprima uma linha em branco entre casos de teste.

(7)

Exemplo de Entrada Exemplo de Saída 1 5 10 1 10 20 27 0 -3 15 15 8 2 7 30 -1 -10 27 20 2 9 14 21 19 -5 -4 -3 -2 -1

(8)

The Grand Dinner

ID: 10249

Cada time participante das finais mundiais da ACM é esperado em um grande jantar a ser realizado depois do final da cerimônia de entrega dos prêmios. No intuito de maximizar a interação entre os membros de diferentes equipes, é esperado que dois membros de uma mesma equipe não se sentem à mesma mesa.

Agora, dado o número de membros em cada equipe (incluindo competidores, técnicos, reservas, convidados, etc.) e a capacidade de assentos em cada mesa disponível, você deve determinar quando é possível que os times se sentem como descrito no parágrafo anterior. Se tal arranjo é possível, você deve imprimir o possível arranjo dos assentos. Se houver múltiplos arranjos possíveis, qualquer um é aceitável.

Entrada

O arquivo de entrada deve conter múltiplos casos de teste. A primeira linha de cada arquivo contém dois inteiros M (1 <=M<=70) e N (1<=N<=50) denotando o número de times e o número de mesas respectivamente. A segunda linha do caso de teste contém M inteiros em que o i-ésimo (1<=i<=M) inteiro mi (1<=mi<=100) indica o número de membros do time i. A terceira linha contém N inteiros em que o j-ésimo (1<=j<=N) inteiro

nj (2<=nj<=100) indica a quantidade de assentos da mesa j.

Um caso de teste contendo dois zeros para M e N termina a entrada.

Saída

Para cada caso de teste na entrada, imprima uma linha contendo 1 ou 0 dependendo se existe ou não um arranjo válido dos membros dos times. Em caso de um arranjo com sucesso, imprima M linhas adicionais em que a i-ésima (1<=i<=M) destas linhas contém o número de uma mesa (um inteiro de 1 a N) para cada um dos membros do time i.

Exemplo de Entrada Exemplo de Saída

4 5 4 5 3 5 3 5 2 6 4 4 5 4 5 3 5 3 5 2 6 3 0 0 1 1 2 4 5 1 2 3 4 5 2 4 5 1 2 3 4 5 0

(9)

Ferry Loading II

ID: 10440

Antes das pontes se tornarem comuns, balsas eram utilizadas para transportar carros através de rios. Balsas de rios, diferentemente de seus primos maiores, correm em uma linha guia e são movidas pela corrente dos rios. Os carros são dirigidos para a balsa em uma margem, a balsa cruza o rio, e os carro saem na outra margem, pelo outro lado da balsa.

Existe uma balsa no rio que pode levar n carros a cruzar o rio em t minutos. m carros chegam ao terminal da balsa em um dado cronograma. Qual é o menor tempo em que todos os carros podem ser transportados para o outro lado do rio? Qual é o menor número de viagens que o operador deve realizar para entregar todos os carros neste tempo?

Entrada

A primeira linha da entrada contém c, o número de casos de teste. Cada caso de teste começa com n, t e m. m linhas seguem, cada uma dando o tempo de chegada para um carro (em minutos, desde o início do dia). O operador pode operar a balsa quando quiser, mas só pode levar carros que chegaram até aquele momento.

Saída

Para cada caso de teste, imprima uma única linha com dois inteiros: o tempo, em minutos desde o início do dia quando o último carro é entregue ao outro lado do rio, e o número mínimo de viagens feitas pela balsa para levar os carros dentro de tal tempo.

Assuma que 0 < n, t, m < 1440. Os tempos de chegada para cada caso de teste estão em ordem não decrescente.

Exemplo de Entrada Exemplo de Saída

2 2 10 10 0 10 20 30 40 50 60 70 80 90 2 10 3 10 30 40 100 5 50 2

(10)

Ants

ID: 10714

Um exército de formigas anda em um trampolim horizontal de comprimento L cm, cada uma com a velocidade constante de 1 cm/s. Quando uma formiga atinge o final de um trampolim, ela imediatamente cai dele. Quando duas formigas se encontram, elas se viram e começam a andar no sentido contrário. Sabemos a posição inicial das formigas no trampolim, infelizmente não sabemos a direção na qual elas estão andando. Sua tarefa é computar o menor e o maior tempo possível necessário para que as formigas caiam do trampolim.

Entrada

A primeira linha da entrada contém um inteiro indicando a quantidade de casos a seguir. Os dados para cada caso começam com dois inteiros: o comprimento do trampolim (em cm) e n, o número de formigas naquele trampolim. Estes dois números são seguidos por n inteiros dando a posição de cada formiga no trampolim com a distância medida a partir da extremidade esquerda do trampolim, em nenhuma ordem particular. Todos os inteiros da entrada não são maiores que 1000000 e são separados por espaço em branco.

Saída

Para cada caso da entrada, imprima dois números separados por um único espaço. O primeiro número é o tempo mais cedo em que todas as formigas caem do trampolim (se as direções de suas caminhadas forem escolhidas apropriadamente) e o segundo número é o tempo mais tarde possível.

Exemplo de Entrada Exemplo de Saída

2 10 3 2 6 7 214 7 11 12 7 13 176 23 191 4 8 38 207

Referências

Documentos relacionados

Os estudos originais encontrados entre janeiro de 2007 e dezembro de 2017 foram selecionados de acordo com os seguintes critérios de inclusão: obtenção de valores de

Deve-se acessar no CAPG, Coordenadorias &gt; Processo de Inscrição &gt; “Selecionar Área/Linha para Inscrição” e indicar as áreas de concentração e linhas de pesquisa nas

Aos 7, 14 e 21 dias após a emergência (DAE), foi determinado o índice SPAD no folíolo terminal da quarta folha completamente expandida devido ser esta folha recomendada para verificar

A seleção portuguesa feminina de andebol de sub-20 perdeu hoje 21-20 com a Hungria, na terceira jornada do Grupo C do Mundial da categoria, a decorrer em Koprivnica, na

Está prevista a redução do Conselho de Administração para 5 membros, dos quais 3 executivos e os restantes dois não executivos.. Os administradores executivos e não

Taking into account the theoretical framework we have presented as relevant for understanding the organization, expression and social impact of these civic movements, grounded on

Super identificou e definiu construtos e a respectiva interacção no desenvolvimento da carreira e no processo de tomada de decisão, usando uma série de hipóteses: o trabalho não

Neste tipo de situações, os valores da propriedade cuisine da classe Restaurant deixam de ser apenas “valores” sem semântica a apresentar (possivelmente) numa caixa