Comentário NOIC OBI 2022 - Fase 2 - Programação Nível Júnior

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 i até i+1 está escuro, podemos testar se P_i+P_{i+1} < 1000, e para o trecho de n até 1, basta checarmos se P_N+P_1 < 1000.

Primeiros vamos checar trechos escuros que vão desde um poste A até um poste B, com A < B, ou seja, não passa pelo trecho do poste N até o 1. Para esse caso, vamos iterar pelos postes da esquerda para direita e manter uma variável consecutivos e resposta que guardará a quantidade de trechos escuros consecutivos até i. Quando P_{i-1}+P_{i} < 1000, aumentamos o valor de consecutivos em 1; e quando P_{i-1}+P_{i} \geq 1000, fazemos resposta = max(resposta,consecutivos) e consecutivos = 0.

O segundo caso é quando os trechos escuros consecutivos passam pelo trecho de n até 1. Nesse caso, vamos primeiro checar se P_N+P_1 < 1000. Se sim, então veremos qual a maior quantidade de trechos consecutivos escuros começando em 1, chamaremos esse número de comeco, e qual a maior quantidade de trechos consecutivos escuros terminando em n, chamaremos esse número de fim. Estão uma das possibilidades de resposta é comeco+fim+1, e computamos ela fazendo resposta = max(resposta,comeco+fim+1).

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 N^2 blocos e temos N/2 camadas, então a complexidade final fica O(N^3). Como N=100, essa solução é rápida o suficiente.

Confira o código para melhor entendimento

 

Entretanto, existe uma solução mais rápida em O(N^2). É 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