Comentário Noic OBI 2019 – Fase 2 – Programação Nível Júnior

Comentário Noic OBI 2019 – Fase 2 – Programação Nível Júnior

Comentário por Lúcio Cardoso e Willian Wang

Para conferir a prova na íntegra, clique aqui.

Nota esquecida

Conhecimento prévio necessário:

Perceba que $$A+B = 2*M$$ e $$B = 2*M – A$$.

Um possível erro é tentar calcular $$B$$ usando divisão com variáveis inadequadas, como $$B=(M+A/2)*2$$ sendo $$A$$ e $$M$$ inteiros, por isso uma boa prática é sempre evitar a operação de divisão no código.

Complexidade: $$O(1)$$.

https://gist.github.com/wilwxk/98d40ab9fe428fd41bc5746ced80ddc1

Tabela do campeonato

Conhecimento prévio necessário:

Note que, como o próprio enunciado indica, as duas equações abaixo tem de ser satisfeitas:

  1. $$J = V + E + D$$, e
  2. $$P = 3V + E$$.

O único caso que não possui solução (não pode ser determinado) é aquele com $$J = -1$$ e $$D = -1$$. Sequer precisamos nos preocupar com este caso, já que o enunciado garante que há uma solução possível. De resto, podemos manipular as equações acima e descobrir os valores de cada variável facilmente.

Assim, podemos usar apenas a estrutura if/else para conferir cada um dos possíveis casos e obter os valores corretos para cada variável desconhecida.

Complexidade: $$O(1)$$.

https://gist.github.com/luciocf/27d7c0041e64400bdfbd2597e953b802

Jogo dos copos

Conhecimento prévio necessário:

Vamos utilizar três variáveis, $$A$$, $$B$$ e $$C$$, que possuem valor $$1$$ se a moeda estiver embaixo do copo representado por sua letra, ou $$0$$ caso contrário.

Para trocar o valor de duas variáveis, efetuando cada uma das três possíveis operações, podemos utilizar o comando $$swap$$ do C++: Ele recebe dois parâmetros, digamos, $$x$$ e $$y$$, e realiza a troca dos seus valores em $$O(1)$$. Como um exemplo, se $$x = 2$$ e $$y = 0$$, o comando $$swap(x, y)$$ faz com que $$x = 0$$ e $$y = 2$$.

Complexidade: $$O(n)$$.

https://gist.github.com/luciocf/9a3ffc6d01e0eefb2ed4c7fe3f4e5297​

https://gist.github.com/luciocf/9a3ffc6d01e0eefb2ed4c7fe3f4e5297