OBI 2022 - Fase 2 - Programação Nível Júnior
Para se preparar para a OBI, confira o nosso Roteiro de Estudos, nele você vai encontrar um direcionamento completo de como estudar!
Para conferir a prova na íntegra, clique aqui.
Troféu
Escrito por Vitor Veiga
Conhecimento prévio necessário:
Dadas cinco pontuações em uma competição, queremos saber o número de competidores empatados com a maior pontuação e com a segunda maior pontuação. Assim, teremos que achar o valor dessas duas pontuações, utilizando um loop, e depois checar quantos participantes obtiveram cada uma delas.
Ordenando o vetor dos valores em ordem decrescente, a primeira posição será o maior número, e o segundo maior será o primeiro número do vetor diferente do maior. Basta agora contar quantas vezes esses valores se repetem utilizando um simples loop, e depois retornar essas quantidades.
Confira o código.
Caminho
Escrito por Arthur Lobo
Conhecimento prévio necessário:
Para sabermos se o trecho de até está escuro, podemos testar se , e para o trecho de até , basta checarmos se .
Primeiros vamos checar trechos escuros que vão desde um poste até um poste , com , ou seja, não passa pelo trecho do poste até o . Para esse caso, vamos iterar pelos postes da esquerda para direita e manter uma variável e que guardará a quantidade de trechos escuros consecutivos até . Quando , aumentamos o valor de em ; e quando , fazemos e .
O segundo caso é quando os trechos escuros consecutivos passam pelo trecho de até . Nesse caso, vamos primeiro checar se . Se sim, então veremos qual a maior quantidade de trechos consecutivos escuros começando em , chamaremos esse número de , e qual a maior quantidade de trechos consecutivos escuros terminando em , chamaremos esse número de . Estão uma das possibilidades de resposta é , e computamos ela fazendo .
Clique aqui para ver o código.
Pirâmide
Escrito por Enzo Dantas
Conhecimento prévio necessário:
Ao visualizar a pirâmide em 3D, a ideia mais intuitiva é construir a pirâmide camada por camada. Começamos pela base da pirâmide e vamos subindo, adicionando um bloco em cada posição de cada camada. Cada camada tem cerca de blocos e temos camadas, então a complexidade final fica . Como , essa solução é rápida o suficiente.
Confira o código para melhor entendimento
Entretanto, existe uma solução mais rápida em . É interessante que o leitor tente achar essa solução antes de ler o restante do editorial. Ao analisar casos pequenos, percebe-se o seguinte padrão: a altura de uma posição qualquer é a a distância da posição a uma das quatro bordas da pirâmide (a menor entre as quatro distâncias). O código consiste em percorrer todas as posições e fazer o mínimo entre as 4 distâncias.
Confira o código para melhor entendimento