Treinamento de Programação para Competição 2016 02 de Julho de 2016 Caderno de Problemas Informações Gerais Este caderno contém 5 problemas; as páginas estão numeradas de 2 a 4, não contando esta página de rosto. Verifique se o caderno está completo. A) Sobre os nomes dos programas 1) Sua solução deve ser chamada codigo_de_problema.c, onde codigo_de_problema é a primeira palavra do nome que identifica o problema. B) Sobre a entrada 1) A entrada de seu programa deve ser lida da entrada padrão. 2) A entrada é composta de um único caso de teste, descrito em um número de linhas que depende do problema. 3) Quando uma linha da entrada contém vários valores, estes são separados por um único espaço em branco; a entrada não contém nenhum outro espaço em branco. 4) Cada linha, incluindo a última, contém exatamente um caractere final de linha. 5) O final da entrada coincide com o final do arquivo. C) Sobre a saída 1) A saída de seu programa deve ser escrita na saída padrão. 2) Quando uma linha da saída contém vários valores, estes devem ser separados por um único espaço em branco; a saída não deve conter nenhum outro espaço em branco. 3) Cada linha, incluindo a última, deve conter exatamente um caractere final de linha.
Treinamento de programação para competição 2 Problema A Calculando Nome do arquivo fonte: calcula.c, calcula.cpp ou calcula.java A disseminação dos computadores se deve principalmente à capacidade de eles se comportarem como outras máquinas, vindo a substituir muitas destas. Esta flexibilidade é possível porque podemos alterar a funcionalidade de um computador, de modo que ele opere da forma que desejarmos: essa é a base do que chamamos programação. A entrada é composta de vários conjuntos de testes. A primeira linha de um conjunto de testes contém um número inteiro m (1 m 100), indicando o número de operandos da expressão a ser avaliada. A segunda linha de um conjunto de testes contém a expressão aritmética a ser avaliada, no seguinte formato: X1 s1 X2 s2... Xm-1 sm-1 Xm onde Xi, 1 i m, é um operando (0 Xi 100); sj, 1 j <m, é um operador, representado pelos símbolos '+ ou '- ; não há espaços em branco entre operandos e operadores. O final da entrada é indicado pelo valor m = 0. Para cada conjunto de testes da entrada seu programa deve produzir três linhas. A primeira linha deve conter um identificador da expressão, no formato "Teste n", onde n é numerado a partir de 1. Na segunda linha deve aparecer o resultado encontrado pelo seu programa. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de, abaixo, deve ser seguida rigorosamente. 3 3+7-22 3 5-10-77 10 1+2+3+4+5+6+7+8+9+10 0 Teste 1-12 Teste 2-82 Teste 3 55
Treinamento de programação para competição 3 Problema B Campo de Minhocas Nome do arquivo fonte: minhoca.c, minhoca.cpp ou minhoca.java Minhocas são muito importantes para a agricultura e como insumo para produção de ração animal. A Organização para Bioengenharia de Minhocas (OBM) é uma entidade não governamental que promove o aumento da produção, utilização e exportação de minhocas. Uma das atividades promovidas pela OBM é a manutenção de uma fazenda experimental para pesquisa de novas tecnologias de criação de minhocas. Na fazenda, a área destinada às pesquisas é de formato retangular, dividida em células quadrangulares de mesmo tamanho. As células são utilizadas para testar os efeitos, na produção de minhocas, de variações de espécies de minhocas, tipos de terra, de adubo, de tratamento, etc. Os pesquisadores da OBM mantêm um acompanhamento constante do desenvolvimento das minhocas em cada célula, e têm uma estimativa extremamente precisa da produtividade em cada uma das células. A figura abaixo mostra um mapa da fazenda, mostrando a produtividade estimada de cada uma das células. Um pesquisador da OBM inventou e construiu uma máquina colhedeira de minhocas, e quer testá- la na fazenda. A máquina tem a largura de uma célula, e em uma passada pelo terreno de uma célula colhe todas as minhocas dessa célula, separando-as, limpando-as e empacotandoas. Ou seja, a máquina eliminara uma das etapas mais intensivas de mão de obra no processo de produção de minhocas. A máquina, porém, ainda está em desenvolvimento e tem uma restrição: não faz curvas, podendo movimentar-se somente em linha reta. Decidiu-se então que seria efetuado um teste com a máquina, de forma a colher o maior número possível de minhocas em uma única passada, em linha reta, de lado a lado do campo de minhocas. Ou seja, a máquina deve colher todas as minhocas de uma coluna ou de uma linha de células do campo de minhocas (a linha ou coluna cuja soma das produtividades esperadas das células é a maior possível). A primeira linha da entrada contém dois números inteiros N e M, representando respectivamente o número de linhas (1 <= N <= 100) e o número de colunas (1 <= M <= 100) de células existentes no campo experimental de minhocas. Cada uma das N linhas seguintes contém M inteiros, representando as produtividades estimadas das células correspondentes a uma linha do campo de minhocas. A saída deve ser composta por uma única linha contendo um inteiro, indicando o número esperado total de minhocas a serem colhidas pela máquina durante o teste.
Treinamento de programação para competição 4 Restrições 0 <= Produtividade de uma célula <= 500 0 <= Produtividade de uma linha ou coluna de células <= 50000 3 4 81 28 240 10 40 10 100 240 20 180 110 35 450 4 1 100 110 0 100 310
Treinamento de programação para competição 5 Problema C Meteoros Nome do arquivo fonte: meteoros.c, meteoros.cpp ou meteoroso.java Em noites sem nuvens pode-se muitas vezes observar pontos brilhantes no céu que se deslocam com grande velocidade, e em poucos segundos desaparecem de vista: são as chamadas estrelas cadentes, ou meteoros. Meteoros são na verdade partículas de poeira de pequenas dimensões que, ao penetrar na atmosfera terrestre, queimam-se rapidamente (normalmente a uma altura entre 60 120 quilômetros). Se os meteoros são suficientemente grandes, podem não queimar-se completamente na atmosfera e dessa forma atingem a superfície terrestre: nesse caso são chamados de meteoritos. Zé Felício é um fazendeiro que adora astronomia e descobriu um portal na Internet que fornece uma lista das posições onde caíram meteoritos. Com base nessa lista, e conhecendo a localização de sua fazenda, Zé Felício deseja saber quantos meteoritos caíram dentro de sua propriedade. Ele precisa de sua ajuda para escrever um programa de computador que faça essa verificação automaticamente. Seu programa deve ler vários conjuntos de testes. A primeira linha de um conjunto de testes quatro números inteiros X1, Y1, X2 e Y2, onde (X1, Y1) é a coordenada do canto superior esquerdo e (X2, Y2) é a coordenada do canto inferior direito do retângulo que delimita a fazenda. A segunda linha contém um inteiro, N, que indica o número de meteoritos. Seguem-se N linhas, cada uma contendo dois números inteiros X e Y, correspondendo às coordenadas de cada meteorito. O final da entrada é indicado por X1 = Y1 = X2 = Y2 = 0. Para cada conjunto de teste da entrada seu programa deve produzir três linhas na saída. 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 o número de meteoritos que caíram dentro da fazenda. A terceira linha deve ser deixada em branco. A grafia mostrada no Exemplo de, abaixo, deve ser seguida rigorosamente.
Treinamento de programação para competição 6 Restrições 0 N 10.000 0 X 10.000 0 Y 10.000 0 X1 < X2 10.000 0 Y2 < Y1 10.000 2 4 5 1 2 1 2 3 3 2 4 3 2 3 1 1 2 2 3 3 0 0 0 0 Teste 1 1 Teste 2 2
Treinamento de programação para competição 7 Problema D Bolhas e Baldes Nome do arquivo fonte: bolhas.c, bolhas.cpp ou bolhas.java Andrea, e Marcelo são muito amigos e passam todos os finais de semana à beira da piscina. Enquanto Andrea se bronzeia ao sol, os dois ficam jogando Bolhas. Andrea, uma cientista da computação muito esperta, já disse a eles que não entende por que passam tanto tempo jogando um jogo tão primário. Usando o computador portátil dela, os dois geram um inteiro aleatório N e uma sequência de inteiros, também aleatória, que é uma permutação de 1, 2,..., N. O jogo então começa, cada jogador faz um movimento, e a jogada passa para o outro jogador. Marcelo é sempre o primeiro a começar a jogar. Um movimento de um jogador consiste na escolha de um par de elementos consecutivos da sequência que estejam fora de ordem e em inverter a ordem dos dois elementos. Por exemplo, dada a sequência 1, 5, 3, 4, 2, o jogador pode inverter as posições de 5 e 3 ou de 4 e 2, mas não pode inverter as posições de 3 e 4, nem de 5 e 2. Continuando com o exemplo, se o jogador decide inverter as posições de 5 e 3 então a nova sequência será 1, 3, 5, 4, 2. Mais cedo ou mais tarde, a sequência ficará ordenada. Perde o jogador impossibilitado de fazer um movimento. Andrea, com algum desdém, sempre diz que seria mais simples jogar cara ou coroa, com o mesmo efeito. Sua missão, caso decida aceitá-la, é determinar quem ganha o jogo, dada a sequência inicial. A entrada contém vários casos de teste. Os dados de cada caso de teste estão numa única linha, e são inteiros separados por um espaço em branco. Cada linha contém um inteiro N, 2 N 10 5, seguido da sequência inicial P = (X 1, X 2,..., X N ) de N inteiros distintos dois a dois, onde 1 X i N para 1 i N. O final da entrada é indicado por uma linha que contém apenas o número zero. Os dados devem ser lidos da entrada padrão. Para cada caso de teste da entrada seu programa deve imprimir uma única linha, com o nome do vencedor, igual a ou a Marcelo, sem espaços em branco. O resultado de seu programa deve ser escrito na saída padrão. 5 1 5 3 4 2 5 5 1 3 4 2 5 1 2 3 4 5 6 3 5 2 1 4 6 5 5 4 3 2 1 6 6 5 4 3 2 1 0 Marcelo Marcelo