OBI2012 Caderno de soluções Modalidade Programação • Nível Júnior, Fase 2 12 de maio de 2012 Promoção: Patrocínio: Olimpíada Brasileira de Informática – OBI2012 1 Chocolate Descrição Dada uma barra quadrada de chocolate de lado L, divide-se a barra em 4 pedaços de lado L/2. Isso se repete com cada pedaço gerado, sucessivamente, enquando o lado for maior que 2. Dado o lado L da barra inicial, quantos pedaços haverão no final. Limites • 1 ≤ L ≤ 104 Solução A quantidade de vezes que a barra de chocolate pode ser dividida, pode ser expressa por a = blog2 Lc. E a quantidade de pedaços ao final será 4a Olimpíada Brasileira de Informática – OBI2012 2 Tira-teima Descrição É dado um retângulo que corresponde a uma quadra de tênis, 36 pés (432 polegadas) x 39 pés (468 polegadas) de comprimento. Digamos que os vértices do retângulo sejam dados pelas coordenadas (0, 0), (0,432), (438, 0) e (438, 432). Dado um ponto (X, Y ) em que a bola toca o solo, a questão é saber se a bola tocou o solo dentro ou fora do retângulo. As coordenadas X e Y são inteiras, possivelmente negativas, em polegadas. Limites • −500 ≤ X, Y ≤ 500 Solução A resposta será afirmativa se e somente se 0 ≤ X ≤ 468 e 0 ≤ Y ≤ 432. Olimpíada Brasileira de Informática – OBI2012 3 Receita de Bolo Descrição Dado que você, para criar um bolo, se precisa de 2 colheres de sopa de farinha de trigo, 3 ovos e 5 copos de leite, e você possui A colheres de sopa de farinha de trigo, B ovos e C copos de leite, você quer saber qual o número máximo de bolos que você deseja fazer, de tal forma que se, por exemplo, você tiver material o suficiente para fazer 2 bolos inteiros, mas não tem para fazer 3, você retorne 2. Limites • 1 ≤ A ≤ 100 • 1 ≤ B ≤ 100 • 1 ≤ C ≤ 100 Solução Para este problema, temos duas formas para resolvê-lo, que resultam na pontuação máxima. A primeira dela é a de, simplesmente, ir verificando qual o número máximo de bolos que é possível ter, que será, no máximo, 20 (devido as restições dadas no problema). Portanto, você precisaria apenas iterar sobre todos os possíveis números de bolos k, vendo se k × 2 ≤ A, se k × 3 ≤ B e se k × 5 ≤ C. Para a segunda maneira de resolver este problema, uma observacão: nas linguagens aceitas para codificação, uma divisão entre 2 números inteiros sempre retorna um número outro inteiro. Sabendo disto, como desejamos calcular qual o maior valor inteiro para podermos criar um bolo, note simplesmente que você só poderá criar, no máximo, A/2 bolos, devido ao número de colheres de sopa de farinha de trigo, B/3 bolos, devido ao número de ovos, e C/5 bolos, devido ao número de copos de leite para cozinhar um bolo e, dentre estes, o menor valor possível entre A/2, B/3 e C/5 será a nossa resposta.