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