Lista de Exercícios 09

Documentos relacionados
Generating Fast, Sorted Permutation

Backtracking. Pequenos Bispos

BCC201 Introdução à Programação ( ) Prof. Reinaldo Silva Fortes. Prática 04 Estruturas de Dados Homogêneas Vetores

Questão 01 (Neilor Tonin) Aula Prática 3: Estrutura Condicional. Entrada. Saída. Exemplo de entrada e Saída. - Procedimento para a entrega:.

Seleção de Problemas:

Lista de Exercícios 3

Lista de Exercícios 2

Maratona de Programação da SBC 2015

Divisão e Conquista. Dado um conjunto de pontos no espaço bidimensional, você deve encontrar a distância entre os dois pontos mais próximos.

Lista de Exercícios 04

Olimpíada Brasileira de Informática OBI2008 Programação Nível Júnior Fase 2 1. Auto Estrada. Nome do arquivo fonte: auto.c, auto.cpp ou auto.

BCC202 - Estrutura de Dados I

Problema A. Volta. Arquivo: volta.[c cpp java]

DCC001 - Programação de Computadores. Lista de Exercícios 02 - Estruturas de Dados Homogêneas (Vetores).

Olimpíada Brasileira de Informática OBI2008 Programação Nível Júnior Fase 2 1. Auto Estrada. Nome do arquivo fonte: auto.c, auto.cpp ou auto.

Lista sobre Estruturas de Dados

Aula 15 - Estruturas de Repetição (p3)

Método Simplex dual. Marina Andretta ICMC-USP. 24 de outubro de 2016

Caderno de Problemas

Aula 19 Elipse - continuação

Lista de Exercícios 05 Strings

Trabalho Prático 2 Mundo dos Blocos Alocação Dinâmica / Listas Encadeadas

3) Que distância percorre em 16 s o corredor cujo gráfico velocidade-tempo é o da figura acima?

Elementos Básicos de Programação

NORMAS GERAIS PARA INSCRIÇÃO DE TRABALHOS

Aula 11: Laços e exercícios

NORMAS PARA ENVIO DOS TRABALHOS COMPLETOS PARA A III JORNADA DE CIÊNCIAS SOCIAIS DA UNIFAL-MG

Caderno de Problemas

Lista de Exercícios 5

INSTRUÇÕES PARA ELABORAÇÃO E FORMATAÇÃO DE ARTIGOS

BCC202 - Estrutura de Dados I

A noção intuitiva de função

Aula Teórica 14 Matrizes

EDITAL 003/ ARTIGOS CIENTÍFICOS A SEREM SUBMETIDOS NA 1ª MOSTRA DE INICIAÇÃO CIENTÍFICA DA ENGENHARIA MECÂNICA DA FACULDADE PITÁGORAS - ICEMEC

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

Maratona de Programação da SBC 2014

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Seletiva Interna da UFMA 2010 Departamento de Informática 16 de Julho de 2010

Elementos Básicos de Programação

Descrição do Algoritmo LZ77

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

EMGI Programação. Ficha 7 Resolução. Programação 1 Calcular a hipotenusa de um triângulo rectângulo, sabendo as medidas dos seus catetos:

Olimpíada Brasileira de Informática OBI Nome do arquivo fonte: tacografo.c, tacografo.cpp, ou tacografo.pas

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Sexta Aula Prática - 28 de abril de 2011

Seleção de Problemas:

OBI2012 Caderno de Tarefas

Caderno de Problemas. 09 de Abril de 2011 A PROVA TEM DURAÇÃO DE 3 HORAS

Caderno de Exercícios Aula 2 (Variáveis, Tipos e Comandos Básicos)

Como as temperaturas estão variando?

A noção intuitiva de função

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

COLÉGIO SÃO JOÃO GUALBERTO

Olimpíada Angolana de Informática (Luanda)

Lista5: Força e Movimento

Algoritmos e Estruturas de Dados II. Trabalho Prático 4

CIC 110 Análise e Projeto de Algoritmos I

SCC0503 (Algoritmos e Estruturas de Dados II) Prof. Moacir P. Ponti Junior. Trabalho 2

INSTRUÇÕES PARA A REALIZAÇÃO DA PROVA LEIA COM MUITA ATENÇÃO

OPI Modalidade Programação. Fase 1

Trabalho de LP 15/07/2013. Prof. Flávio Miguel Varejão

XX OLIMPÍADA DE MATEMÁTICA DO ESTADO DO RIO GRANDE DO NORTE - Em 19/09/2009

Aula 16: Laços aninhados e desvios

Maratona de Programação da SBC 2014

Возрастная группа: 3 º ano, 2º ano Онлайн ресурсы: A c urt o prazo

Lista de Exercícios de Arranjo Físico Industrial Prof. Artur

Universidade Estadual do Oeste do Paraná UNIOESTE Campus de Cascavel Colegiado de Ciência da Computação. Algoritmos Trabalho 3º Bimestre

Algoritmos e Lógica de Programação 80 horas // 4 h/semana. Exercício... Para começar... Resolução... Para começar... Para começar...

Algoritmos e Estruturas de Dados II Lista de Exercícios de Listas Lineares

Transcrição:

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. ID: 66 Making Change 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, 0c, 20c, 50c, $ e $2.). Portanto, se precisamos pagar 55c e não possuímos uma moeda de 50c, poderíamos pagar como 2*20c + 0c + 5c com um total de 4 moedas. Se oferecermos $, receberemos 45c de troco que também envolve 4 moedas, mas se oferecermos $.05 ($ + 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. 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.

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 2 4 2 2 0 0.95 2 4 2 0 0 0.55 0 0 0 0 0 0 Exemplo de 2 3

Work Reduction ID: 0670 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. 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ê, (<=M<=N<=00000, <=L<=00). 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<=0000). O comprimento do nome da agência será entre e 6, e consistirá apenas de letras maiúsculas. Os nomes de agências serão únicos. 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 Exemplo de 00 5 3 A:,0 B:2,5 C:3, 23 22 5 B:50,300 A:,000 C:0,0 D:,50 E:0,0 Case C 7 B 22 A 37 Case 2 E 0 A D C 0 B 50

Minimal Coverage ID: 0020 Dados vários segmentos de linha (no eixo X), com coordenadas [L, R ], você deve escolher a menor quantidade deles, tal que eles completamente cobrem o segmento [0, M]. 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 (<=M<=5000), seguido pelos pares L i, R i ( L i, R i <=50000, i<00000), 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. 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 (L i ), 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 Exemplo de 2-0 -5-3 2 5 0 0-0 0 0 0 0 0

Shoemaker s Problem ID: 0026 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 T i (<=T i <=000), 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 S i (<=S i <=0000) centavos. Sua tarefa é ajudar o sapateiro, escrevendo um programa para encontrar uma sequência de tarefas com menor multa total. 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 (<=N<=000). As próximas N linhas contêm dois números cada, o tempo e a multa de cada tarefa. 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 Exemplo de 4 3 4 000 2 2 5 5 2 3 4

Advertisement ID: 048 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. A primeira linha da cada caso de teste contém dois inteiros K e N (<=K, N<000) 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 A i e B i (ambos os números não maiores que 0000 por valor absoluto). A i representa o número do primeiro letreiro visto pelo corredor número i e B i representa o número do último letreiro visto pelo mesmo corredor. Durante uma corrida, o corredor i verá os letreiros A i, B i, e todos os que estiverem entre eles. 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.

Exemplo de Exemplo de 5 0 0 20 27 0-3 5 5 8 2 7 30 - -0 27 20 2 9 4 2 9-5 -4-3 -2 -

The Grand Dinner ID: 0249 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. O arquivo de entrada deve conter múltiplos casos de teste. A primeira linha de cada arquivo contém dois inteiros M ( <=M<=70) e N (<=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 (<=i<=m) inteiro m i (<=m i <=00) indica o número de membros do time i. A terceira linha contém N inteiros em que o j-ésimo (<=j<=n) inteiro n j (2<=n j <=00) indica a quantidade de assentos da mesa j. Um caso de teste contendo dois zeros para M e N termina a entrada. Para cada caso de teste na entrada, imprima uma linha contendo 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 (<=i<=m) destas linhas contém o número de uma mesa (um inteiro de a N) para cada um dos membros do time i. Exemplo de Exemplo de 4 5 4 5 3 5 3 5 2 6 4 4 5 4 5 3 5 3 5 2 6 3 0 0 2 4 5 2 3 4 5 2 4 5 2 3 4 5 0

Ferry Loading II ID: 0440 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? 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. 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 < 440. Os tempos de chegada para cada caso de teste estão em ordem não decrescente. Exemplo de Exemplo de 2 2 0 0 0 0 20 30 40 50 60 70 80 90 2 0 3 0 30 40 00 5 50 2

Ants ID: 074 Um exército de formigas anda em um trampolim horizontal de comprimento L cm, cada uma com a velocidade constante de 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. 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 000000 e são separados por espaço em branco. 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 2 0 3 2 6 7 24 7 2 7 3 76 23 9 Exemplo de 4 8 38 207