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 .