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;

  }