A modalidade Programação é indicada para alunos do
Ensino Médio ou Fundamental e é dividida em quatro níveis:
Nível Júnior: para alunos até o nono ano do ensino fundamental
Nível 1: para alunos
até o primeiro ano do ensino médio
Nível 2: para alunos
até o terceiro ano do ensino médio
Nível Sênior: para alunos
do quarto ano do ensino técnico.
Só podem participar da
competição alunos que tenham no máximo 20 anos completos no dia primeiro de
julho do ano de sua participação, com exceção do nível sênior, que não possui
limite de idade. Todos os participantes receberão certificados de participação.
Os melhores colocados de cada modalidade receberão ainda medalhas de ouro,
prata e bronze.
Os melhores colocados
dos níveis júnior e 1 serão convidados para uma semana de cursos no Instituto
de Computação da UNICAMP. Para os alunos do nível 2, haverá uma seleção para
escolher os quatro alunos integrantes da equipe brasileira na Olimpíada Internacional
de Informática, que conta com a participação de equipes de mais de 70 países.
Datas das provas
1ª Fase (local): 30/05/2019
(quinta-feira), com duração de 2 horas.
2ª Fase
(estadual):
14/08/2019 (quarta-feira), com duração de 2 horas.
3ª Fase
(nacional):
21/09/2019 (sábado), com duração de 3 horas (nível júnior), 4 horas (nível 1) e
5 horas (níveis 2 e sênior).
Semana Olímpica da OBI: 02/12/2019 até 08/12/2019
Como se preparar
A boa participação na
OBI depende de conhecimentos de uma linguagem de programação, de conhecimentos
básicos e intermediários de estrutura de dados e algoritmos e de prática na
resolução de problemas. É possível se preparar usando o próprio material
disponível pelo site da OBI.
Existem sites que ajudam o treinamento oferecendo
diversos problemas de competição de programação, como por exemplo:
·
SPOJ
Brasil: br.spoj.com
·
URI Online Judge: www.urionlinejudge.com.br
As linguagens de
programação aceitas são: Pascal, C, C++, Java, JavaScript
e Python. Para a seletiva da Olímpiada Internacional, apenas podem ser usadas
as linguagens C, C++, Java.
As inscrições são
feitas pela própria escola ou universidade onde será feita a prova, então é
importante verificar o calendário de inscrições no site da OBI.
Exemplo
de problema e solução:
Juliana é uma famosa
doceira reconhecida internacionalmente pelos seus bombons, exportados para todo
o mundo. Embora não revele a ninguém as suas receitas, ela já deu entrevistas
contando alguns de seus segredos. Sua fábrica de bombons utiliza somente
chocolates comprados de um único produtor suíço, que envia barras gigantescas
que são cortadas por grandes máquinas.
Dada uma barra grande
de chocolate, Juliana realiza divisões sucessivas da barra até obter uma barra
que contém a quantidade exata de chocolate para aquela receita. Após cada
divisão, ela seleciona um dos pedaços resultantes e armazena os demais para uso
futuro. As divisões são determinadas por critérios técnicos relacionados ao
tamanho das barras e aos equipamentos disponíveis em um dado momento.
Por exemplo, se ela
deseja obter uma barra de 100g de chocolate a partir de uma barra de 3Kg,
primeiro ela divide a barra ao meio. Em seguida, um dos pedaços é dividido em
cinco partes iguais e por fim, um desses pedaços de 300g é dividido em 3
pedaços, resultando no pedaço de 100g necessário para a receita. Nesse
processo, 1 pedaço é utilizado para a receita e 7 pedaços de diferentes
tamanhos serão guardados para uso futuro. A figura abaixo ilustra esse cenário.
Tarefa
Dada uma seqüência de divisões realizadas por Juliana em uma barra
de chocolate, determinar quantos pedaços serão armazenados em estoque para uso
futuro.
Entrada
A entrada contém um
único conjunto de testes, que deve ser lido do dispositivo de entrada padrão
(normalmente o teclado). A primeira linha da entrada contém um inteiro N que
indica o número de divisões feitas na barra de chocolate original (1≤ N ≤
1.000). A linha seguinte contém N inteiros I (2 ≤ I ≤· 10)
representando o número de pedaços em que o pedaço atual foi dividido. Sempre
que é feita uma divisão, um pedaço é utilizado para a próxima divisão e os
demais são separados para serem armazenados em estoque.
Saída
Seu programa deve
imprimir, na saída padrão, uma única linha, contendo o número de pedaços de
chocolate que serão armazenados em estoque.
Entrada 3 2 3
5 Saída 7 |
Entrada 5 2 2
2 3 3 Saída 7 |
Entrada 7 2 3
4 5 6 7 8 Saída 28 |
Uma solução para o
problema Chocolate:
#include <stdio.h>
int main (void) {
int total = 0;
int i,
cortes, c;
scanf
("%d", &cortes);
for (i
= 0; i < cortes; i++) {
scanf
("%d", &c);
total = total + (c – 1);
}
printf
("%d\n", total);
return 0;
}