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

Comentário por Leonardo Paes

Para conferir a prova na íntegra, clique aqui.

Dominó

Conhecimento prévio necessário:

Para resolvermos o problema Dominó, basta imprimirmos na saída a equação dada no enunciado: $$((N+1)*(N+2))/2$$.

Complexidade: $$O(1)$$.


// Comentário Noic OBI 2019 – Fase 1 – Programação Nível Júnior
// Dominó
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
cout << ((n+1)*(n+2))/2 << "\n";
return 0;
}

view raw

Domino.cpp

hosted with ❤ by GitHub

Idade de Dona Mônica

Conhecimento prévio necessário:

Como a idade da Dona Mônica é igual a soma da idade dos três filhos, temos a seguinte relação: $$M = A+B+C$$. Para descobrirmos a idade do terceiro filho, basta isolarmos o C na equação, obtendo: $$C = M-A-B$$. Após termos as três idades, podemos utilizar a função max() do C++ para imprimir a idade do filho mais velho.

Complexidade: $$O(1)$$.


// Comentário Noic OBI 2019 – Fase 1 – Programação Nível Júnior
// A idade de Dona Mônica
#include <bits/stdc++.h>
using namespace std;
int main(){
int m, a, b, c;
cin >> m >> a >> b;
c = (m-a-b);
cout << max(max(a, b), c) << "\n";
return 0;
}

view raw

idade.cpp

hosted with ❤ by GitHub

Sequência Secreta

Conhecimento prévio necessário:

Para resolvermos esse problema, utilizaremos uma abordagem “gulosa”. Nós sabemos que a sequência sempre começa e termina com o número $$1$$. Portanto, podemos utilizar um loop que começa na posição $$1$$ da sequência e termina na posição $$n$$. Nesse loop, utilizaremos uma variável auxiliar chamada de $$ultimo$$, que representa o valor do último inteiro que marcamos na nossa resposta. Como dito no enunciado, só podemos escolher uma sequência se os números consecutivos dela forem diferentes, portanto, sempre que nossa variável $$ultimo$$ possuir um valor distinto do valor atual, é ótimo aumentarmos nossa resposta em 1, e mudarmos o $$ultimo$$ para o valor atual. Após percorremos o loop, basta imprimirmos a quantidade de números marcados, que está guardado na variável $$resposta$$.

Complexidade: $$O(n)$$.


// Comentário Noic OBI 2019 – Fase 1 – Programação Nível Júnior
// Sequência Secreta
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int ultimo, resposta=0;
for(int i=1; i<=n; i++){
// número desenhado no chão na posição i
int vi;
cin >> vi;
// ao começarmos o loop, dizemos que nosso último número marcado
// contém valor vi, que nesse caso sempre é 1, aumentando nossa resposta
if(i == 1){
ultimo = vi;
resposta++;
}
// caso o número que está desenhado no chão for diferente do nosso
// último número escolhido, nós o marcamos e aumentamos nossa resposta
else if(ultimo != vi){
ultimo = vi;
resposta++;
}
}
cout << resposta << "\n";
return 0;
}

view raw

secreta.cpp

hosted with ❤ by GitHub