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