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: .
Complexidade: .
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; | |
} |
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: . Para descobrirmos a idade do terceiro filho, basta isolarmos o C na equação, obtendo: . Após termos as três idades, podemos utilizar a função max() do C++ para imprimir a idade do filho mais velho.
Complexidade: .
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; | |
} |
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 . Portanto, podemos utilizar um loop que começa na posição da sequência e termina na posição . Nesse loop, utilizaremos uma variável auxiliar chamada de , 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 possuir um valor distinto do valor atual, é ótimo aumentarmos nossa resposta em 1, e mudarmos o para o valor atual. Após percorremos o loop, basta imprimirmos a quantidade de números marcados, que está guardado na variável .
Complexidade: .
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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; | |
} |