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:
- $$J = V + E + D$$, e
- $$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
