OBI2012 Caderno de soluções

Propaganda
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.
Download