1º Contest Noturno 11 de Julho 2013 Servidor CD MOJ: https://www.brunoribas.com.br/~moj/ Seleção de Problemas: Bruno Ribas 1
Conta de eletricidade Problema: A Código fonte: conta.{c,cpp,java,pas} É o ano de 2100. Eletricidade se tornou muito cara. Recentemente, sua companhia de eletricidade aumentou as taxas de energia novamente. A tabela abaixo mostra as novas taxas (consumo é sempre um inteiro positivo): Intervalo (Watt-hora) Custo (Reais) 1 ~ 100 2 101 ~ 10000 3 10001 ~ 1000000 5 > 1000000 7 Isto significa que, ao calcular a quantia a pagar, os primeiros Wh custam 2 Reais cada; os próximos 9900 Wh (entre 101 e 10000) custam 3 Reais cada e assim por diante. Por exemplo, se você consumir 10123 Wh deverá pagar 2 x 100 + 3 x 9900 + 5 x 123 = 30515 Reais. Os matemáticos da companhia encontraram um modo de ganhar ainda mais dinheiro. Ao invés de lhe dizer quanta energia você consumiu e quanto você deve pagar, eles mostrarão a você dois números relacionados a você e a um vizinho aleatório: 1. o total a pagar se seus consumos fossem somados; e 2. a valor absoluto da diferença entre os custos de suas contas. Se não conseguir descobrir quanto deve pagar, você deve pagar outros 100 Reais para tal "serviço". Você é muito econômico, e portanto você tem certeza que não consome mais que nenhum de seus vizinhos. Então, esperto como é, você sabe que consegue computar quanto tem que pagar. Por exemplo, suponha que a companhia informou a você os dois seguintes números: A = 1100 e B = 300. Então o seu consumo e o de seu vizinho devem ser 150 Wh e 250 Wh, respectivamente. O consumo total é 400 Wh e A é então 2 x 100 + 3 x 300 = 1100. Você deve pagar 2 x 100 + 3 x 50 = 350 Reais, enquanto seu vizinho deve pagar 2 x 100 + 3 x 150 = 650 Reais, portanto B é 350-650 = 300. Decidido a não pagar a taxa adicional, você decidiu escrever um programa de computador para descobrir quanto você deve pagar. Entrada A entrada contém vários casos de teste. Cada caso de teste é composto de uma única linha contendo dois inteiros A e B, separados por um espaço em branco, representando os valores apresentados a você (1 A,B 10 9 ). Você pode assumir que sempre haverá uma soluçao única, ou seja, existe apenas um par de consumos que produz esses valores. O último caso de teste é seguido de uma linha contendo dois zeros separados por um espaço em branco. 2
Saída Para cada caso de teste da entrada, seu programa deve imprimir uma linha contendo um inteiro representando o total que você deve pagar. Exemplo Entrada: 1100 300 35515 27615 0 0 Saída: 350 2900 3
O Fantástico Jaspion! Problema: B Código fonte: jaspion.{c,cpp,java,pas} Em 1985 estréia na TV Japonesa a série Kyojiu Tokusou Jaspion (Investigador Especial de Monstros Jaspion). A série chega ao Brasil alguns anos depois com o título "O Fantástico Jaspion", e com ela nasce a fantasia de polícia espacial em milhões de brasileirinhos. As crianças saíam da escola, corriam pelas ruas (sem olhar se vinha carro), ligavam a TV e mergulhavam na coragem, exemplo de pessoa, e incontestável sede por justiça do Fantástico Jaspion. O comércio de gibis e as brigas por figurinhas no recreio da escola estavam alcançando números históricos. Até então, tal sentimento só havia sido estimulado com tanta intensidade pelo Chaves e a sua turma! Diante dessa febre inter-galática, o inevitável aconteceu. Os produtores do Jaspion ganharam o Nobel da Paz! Isso mesmo! Os produtores ganharam um Nobel. As histórias do grandioso Jaspion estavam por todo canto. Agora as crianças tinham um belíssimo exemplo para seguir. A paz mundial estava garantida! Não precisávamos mais temer o monstrengo Satan Gos! No Brasil havia uma criança que adorava as histórias do Jaspion! Antônio Melhorança Capote Valente Junior carinhosamente apelidado de ACM, um menino da zona sul de São Paulo que adorava cantar as músicas do grande herói. Ele era tão fanático que chegou a comprar um dicionário de Japonês-Português e iniciou um trabalho árduo de tradução. Entretanto, o trabalho ficou inacabado! Alguns trechos da canção ainda precisam ser traduzidos. Neste momento você deve estar se perguntando: qual é a minha tarefa neste fabuloso problema? Ok! Antes de falar da sua tarefa, convide seu companheiro de equipe para mergulhar com você no desfecho da história. Para isso, vamos falar mais um pouco sobre o nosso ACM. Ele se formou em Ciência da Computação e hoje trabalha no mesmo escritório que você. Pois é! Você trabalha como programador ao lado dessa figura! Como sabemos que você gosta muito dele, temos certeza que vai aceitar a seguinte tarefa: dado um dicionário Japonês-Português e uma letra de música, escreva um programa que imprima a letra traduzida. Entrada A primeira linha de um caso de testes contém um inteiro T que indica o número de instâncias subseqüentes. A primeira linha de cada instância contém dois inteiros M e N (1 M 1000000, 1 N 1000), que representam o número de palavras no dicionário e o número de linhas na letra da música, respectivamente. Os próximos M pares de linhas contêm as traduções: a primeira linha de cada par contém a palavra em Japonês, e a segunda linha contém a tradução para o Português (que pode ter uma ou mais palavras). Todas as palavras usam apenas letras minúsculas. Cada palavra em Japonês aparece apenas uma vez em cada instância. As próximas N linhas contêm a letra da música. Cada linha da letra da música é uma lista de palavras separadas por um espaço (todas as palavras consistem apenas de letras minúsculas). Algumas podem estar vazias, mas nenhuma linha possui espaços no início ou no final. Nenhuma linha contém mais do que 80 letras. 4
Saída Para cada instância imprima as N linhas traduzidas. As palavras que não estão no dicionário devem ser impressas como aparecem na entrada. Imprima uma linha em branco no final de cada tradução. Nenhuma linha da saída contém mais do que 80 letras. Exemplo Exemplo de entrada 1 4 3 galaxy cara tossiu kagayaku canalha do atsuki alto que yuushi util o galaxy o galaxy o kagayaku atsuki yuushi Exemplo de saída o cara tossiu o cara tossiu o canalha do alto que util 5
Palavras primas Problema: C Código fonte: palavras.{c,cpp,java,pas} Um número primo é um número que possui somente dois divisores: ele mesmo e o número 1. Exemplos de números primos são: 1, 2, 3, 5, 17, 101 e 10007. Neste problema você deve ler um conjunto de palavras, onde cada palavra é composta somente por letras no intervalo a-z e A-Z. Cada letra possui um valor específico, a letra a vale 1, a letra b vale 2 e assim por diante, até a letra z, que vale 26. Do mesmo modo, a letra A vale 27, a letra B vale 28 e a letra Z vale 52. Você deve escrever um programa para determinar se uma palavra é uma palavra prima ou não. Uma palavra é uma palavra prima se a soma de suas letras é um número primo. Entrada A entrada consiste de um conjunto de palavras. Cada palavra está sozinha em uma linha e possui L letras, onde 1 L 20. A entrada é terminada por fim de arquivo (EOF). Saída Para cada palavra você imprimir: It is a prime word., se a soma das letras da palavra é um número primo, caso contrário você deve imprimir It is not a prime word.. Exemplo Entrada: UFRN contest AcM Saída: It is a prime word. It is not a prime word. It is not a prime word. 6
Macaco-prego Problema: D Código fonte: macaco.{c,cpp,java,pas} O macaco-prego é um animal irrequieto e barulhento, merecedor também dos adjetivos desordeiro e despudorado. A sua cabeça, encimada por uma densa pelagem negra ou marrom-escura, semelhante a um gorro, torna seu aspecto inconfundível. Apesar de ser o macaco mais comum nas matas do país, uma de suas sub-espécies encontra-se seriamente ameaçada de extinção: o macacoprego-do-peito-amarelo, que se distingue das demais pela coloração amarelada do peito e da parte anterior dos braços. Um grande esforço foi feito pelos primatologistas para aumentar a população dos macacos-pregodo-peito-amarelo. Sabe-se que eles se alimentam de plantas, das quais consomem preferencialmente frutos e brotos. Alimentam-se também de muitos animais, preferencialmente lesmas, lagartas e rãs, e preferem as florestas mais densas. Para determinar o melhor local do país para criar uma nova reserva ambiental para os macacos-prego-do-peito-amarelo, o governo fez um levantamento das regiões no país onde as condições preferidas desses animais ocorrem: regiões de floresta densa, regiões com frutos, regiões com muitos brotos, etc. Ajude a salvar os macacos-pregodopeito-amarelo. Tarefa As regiões propícias para o macaco-prego-do-peito-amarelo foram determinadas como retângulos cujos lados são todos verticais ou horizontais. Sua tarefa é encontrar o local ideal para a reserva ambiental, definida como a interseção de todas as regiões dadas. As regiões foram divididas de tal forma que uma região não tangencia qualquer outra região. Assim, a interseção entre quaisquer duas regiões ou é um retângulo ou é vazia. Entrada Seu programa deve ler vários conjuntos de teste. A primeira linha de um conjunto de teste contém um inteiro não negativo, N, que indica o número de regiões (o valor N = 0 indica o final da entrada). Seguem-se N linhas, cada uma contendo quatro números inteiros X, Y, U e V que descrevem uma região: o par X, Y representa a coordenada do canto superior esquerdo e o par U, V representa a coordenada do canto inferior direito de um retângulo. Saída Para cada conjunto de teste da entrada seu programa deve produzir três linhas na saída. 7
A primeira linha deve conter um identificador do conjunto de teste, no formato "Teste n", onde n é numerado a partir de 1. A segunda linha deve conter as coordenadas do retângulo de interseção encontrado pelo seu programa, no mesmo formato utilizado na entrada. Caso a interseção seja vazia, a segunda linha deve conter a expressão "nenhum". A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de Saída, abaixo, deve ser seguida rigorosamente. Exemplo Entrada: 3 0 6 8 1 1 5 6 3 2 4 9 0 3 0 4 4 0 3 1 7 3 6 4 10 0 0 Saída: Teste 1 2 4 6 3 Teste 2 nenhum Restrições 0 N 10000 (N = 0 apenas para indicar o fim da entrada) -10000 X 10000-10000 Y 10000-10000 U 10000-10000 V 10000 8