Caderno de soluções - Olimpíada Brasileira de Informática

Transcrição

Caderno de soluções - Olimpíada Brasileira de Informática
OBI2011
Caderno de soluções
Modalidade
Programação • Nível 1, Fase 1
26 de março de 2011
Promoção:
Patrocínio:
1
Olimpíada Brasileira de Informática OBI2011
Corrida
Descrição
Dados N competidores que vão participar de uma corrida de M voltas. Damos o tempo que cada competidor
levou para completar cada volta e perguntamos quem são os 3 primeiros a terminar a corrida. Garantimos que
não haverá empates.
Limites
• 3 ≤ N ≤ 100
• 1 ≤ M ≤ 100
• 1 ≤ tempo de cada volta ≤ 106
Solução
Suponha que temos uma estrutura de dados, chamada Competidor, que possui dois inteiros id e soma. Tome
um vetor V [1..N ] de estruturas do tipo Competidor. Suponha que inicialmente V [i].id = i e V [i].soma é a soma
dos tempos das voltas do i-ésimo competidor. Se ordenarmos os elementos de V de forma que V [1].soma ≤
V [2].soma ≤ V [3].soma ≤ · · · ≤ V [N ].soma, então a solução do problema é V [1].id, V [2].id e V [3].id, pois estes
são os competidores com os menores tempos. Logo, a tarefa consiste em modelar a entrada como descrito acima
e em seguida efetuar uma ordenação. Se você não conhece nenhum algoritmo de ordenação, então este problema
servirá como uma belíssima motivação para o estudo destes algoritmos. Antes de olhar uma das soluções ociais,
sugerimos que tente ler e implementar o algoritmo Bubble Sort (http://en.wikipedia.org/wiki/Bubble_sort).
Você certamente, conseguirá fazer uma pequena modicação deste algoritmo para resolver o problema proposto.
Olimpíada Brasileira de Informática OBI2011
2
Progressões Aritméticas
Descrição
Dada uma sequência com N números a1 , a2 , ..., aN , determinar o número mínimo de progressões aritméticas
que formam a sequência. Nota: As progressões aritméticas devem ser formadas por elementos consecutivos da
sequência original e cada termo da sequência só pertence a uma PA.
Limites
• 1 ≤ N ≤ 100000
• −105 ≤ ai ≤ 105
Solução
A solução desse problema consiste em ir percorrendo a sequência e ver quando dois elementos consecutivos têm
uma diferença diferente da diferença anterior, a partir daí uma nova PA deve ser criada com essa nova razão.
A complexidade de tempo esperada é O(N).
Olimpíada Brasileira de Informática OBI2011
3
Pulo do Sapo
Descrição
Dados inteiros N e M e pares de inteiros (p1 , d1 ), (p2 , d2 ), ..., (pM , dM ), imprima N inteiros onde o i-ésimo
inteiro é
• 1 se existe um j onde 1 ≤ j ≤ M e um X tal que i + Xdj = pj ou i − Xdj = pj ;
• 0 caso contrário.
Limites
• 1 ≤ N ≤ 100
• 1 ≤ M ≤ 100
• 1 ≤ pj ≤ N , para todo j = 1, 2, · · · , M
• 1 ≤ dj < 231 , para todo j = 1, 2, · · · , M
Solução
Podemos alocar um vetor de inteiros de comprimento N e para cada par (p, d) da entrada marcamos com 1 nas
posições p, p + d, p + 2d, · · · , p + Xd, onde p + Kd ≤ N , fazemos o mesmo nas posições p − d, p − 2d, · · · , p − Y d,
onde p − Y d ≥ 1. Dessa ideia podemos derivar um algoritmo que executa aproximadamente N × M passos para
resolver uma instância do problema.
Olimpíada Brasileira de Informática OBI2011
4
Triângulos
Descrição
Dados 3 números inteiros, A, B e C . Devemos decidir qual das seguintes armações é verdadeira:
• Não existe um triângulo com lados A, B e C .
• O triângulo com lados A, B e C tem todos os ângulos internos agudos.
• O triângulo com lados A, B e C tem um ângulo interno reto.
• O triângulo com lados A, B e C tem um ângulo interno obtuso.
Limites
• 1 ≤ A ≤ 104
• 1 ≤ B ≤ 104
• 1 ≤ C ≤ 104
Solução
Supondo que A ≥ B ≥ C , existe o triângulo de lados A, B e C se e somente se A < B + C . Para vericar a
situação dos ângulos basta olhar em que caso estamos:
• Todos os ângulos internos são agudos se e somente se A2 < B 2 + C 2 .
• Um ângulo interno é reto se e somente se A2 = B 2 + C 2 .
• Um ângulo interno é obtuso se e somente se A2 > B 2 + C 2 .