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
