Comentário NOIC OBOI 2023 - Fase 1 - Nível Júnior

OBOI 2023 - Fase 1 - Nível Júnior

Se você quiser se preparar para a OBI, não deixe de conferir o Roteiro de estudos de informática, e também a página de informática do NOIC, com todos nossos materiais.

Para conferir a prova na íntegra, clique aqui.

Gohan

Comentário escrito por Murilo Maeda

A resolução é bem simples: basta comparar a soma das notas. Já que ambas as somas são divididas pelo mesmo valor, se a soma de um é maior que a do outro, a média também será.  O problema é que os valores de média podem ir até 10^5, que é maior do que o limite do int. Para resolver isso, basta mudar para long long int. Note também que se você quiser comparar as médias (fazendo a divisão), é necessário usar long double, já que apenas com double a divisão retorna um número com casas o suficiente para o código retornar que as duas médias são iguais, mesmo que elas sejam diferentes.

Clique aqui para conferir o código

Óculos de Enzo

Comentário escrito por Estela Baron

Conhecimento prévio necessário:

Depois de ler a entrada (N, E e D), podemos calcular a pontuação de cada óculos e comparar se já existe alguma pontuação menor. Para fazer isso, temos que somar o valor absoluto da diferença de E-e_i com o valor absoluto de D-d_i. Observe que, para obter o valor absoluto, podemos utilizar a função abs() - por exemplo: abs(5-7) retorna o valor de 2. Além disso, podemos atualizar a resposta com o mínimo entre o que já está na resposta e a nova pontuação. Para realizar isso, usamos a função min() - por exemplo: min(8,99) retorna o valor 8.

Assim, basta utilizar um for() para ler todo par e_i e d_i, calcular a nova pontuação e atualizar a resposta se necessário.

Ao final, basta imprimir a resposta. Atenção para não esquecer de pular linha!!! (cout << endl; ou cout <<'\n';)

Detalhes da implementação: a resposta é inicializada como -1 para indicar que não foi nenhum óculos. Portanto, é necessário verificar se a resposta é diferente de -1 para utilizar o min() - afinal todas as pontuações são não negativas. Outra alternativa para não ter que verificar o caso do -1 seria inicializar a melhor pontuação com um valor extremamente grande, mas cuidado para não exceder o limite do inteiro ou deixar o valor muito baixo.

Observação: para ler a entrada, temos que declarar a variável como inteiro - ex: int N; - e atribuir o valor do input. Podemos utilizar o comando scanf("%d", &N); ou cin >> N; . Da mesma forma, para imprimir, podemos fazer ou printf("%d\n", N); ou cout << N << endl; ou cout << N << '\n';.

Cuidado: '\n' é para pular linha, mas podemos também declarar uma variável n: int n; - que é diferente de int N;

Clique aqui para conferir o código

Matriz Maluca

Comentário escrito por Caique Paiva

Conhecimentos Prévios Necessários:

Vamos criar duas variáveis, Lobo e Enzo. Em cada jogada, nos é dado dois valores (i, j), então, adicionamos os números que estão na linha i e os valores que estão na coluna j, sem repetir o valor de (i,j), para a variável Lobo, se for a jogada do lobo, ou para a variável Enzo, se for a vez do enzo, e então, trocamos o valor de cada um desses números que adicionamos por 0.

Depois de todas as operações, vemos se Enzo é maior que Lobo: Se sim, imprimimos Enzo. Se Enzo = Lobo, então imprimos empate, e caso nenhum dos anteriores aconteça, imprimimos Lobo.

Clique aqui para conferir o código