Este é o Ambiente de Prova da Olimpíada Brasileira de Informática.

IMPORTANTE

  • A prova somente é iniciada — e o tempo de duração começa a contar — quando você clicar no botão "Iniciar" na aba Prova.
  • Antes de iniciar a prova, leia a Folha de Informações e o Manual do EditorOBI (mais abaixo nesta página).
  • Após iniciar a prova, caso ela seja encerrada, não será possível acessá-la novamente.
  • Para encerrar a prova, clique no botão "Encerrar".
  • Não tente mudar para outro aplicativo durante a prova (por exemplo usando ALT-TAB) – sua prova será encerrada.

Estrutura do ambiente

O ambiente é dividido em três abas principais:

  • Informações:
    • Esta aba, que contém instruções gerais.
  • EditorOBI:
    • Aba destinada à implementação e submissão das suas soluções. Ela contém um editor de código online com compilador integrado.
    • Utilize-a para escrever, compilar e testar seus programas (em C++, Python ou Java) com entradas criadas por você.
    • É também nesta aba que você deve submeter suas soluções para correção.
  • Prova:
    • Nesta aba você inicia a prova e visualiza os enunciados das tarefas.
    • Também é nesta aba que você acompanha o resultado das submissões feitas na aba EditorOBI.

Atalhos de teclado

  • Ctrl + 1: Ir para a aba Informações.
  • Ctrl + 2: Ir para a aba EditorOBI.
  • Ctrl + 3: Ir para a aba Prova.

Boa prova!


OBI Logo
Modalidade Programação

Folha de Informações

1   Instruções Gerais

  • A prova deve ser feita individualmente, na escola, sob supervisão.
  • É proibido consultar a Internet, livros, anotações ou qualquer outro material durante a prova.
  • É proibido utilizar ferramentas de Inteligência Artificial para resolver as tarefas.
  • A correção é automatizada, portanto siga atentamente as exigências da tarefa quanto ao formato da entrada e saída de seu programa; em particular, seu programa não deve escrever frases como "Digite o dado de entrada:" ou similares.
  • Não implemente nenhum recurso gráfico nas suas soluções (janelas, menus, etc.), nem utilize qualquer rotina para limpar a tela ou posicionar o cursor.
  • Procure resolver as tarefas de maneira eficiente. Na correção, eficiência também será levada em conta. As soluções serão testadas com muitas outras entradas além das apresentadas como exemplo nas tarefas.

2   Corretor

As soluções submetidas para correção são corrigidas utilizando o mesmo corretor utilizado na Olimpíada Internacional de Informática.

Você pode submeter até 50 soluções para cada tarefa, obedecendo a um intervalo de 60 segundos entre duas submissões consecutivas.

O tempo de prova é controlado pelo Ambiente de Prova e começa a contar a partir do momento que você clica o botão Iniciar na aba Prova.

3   Subtarefas

Na OBI uma subtarefa é um grupo de casos de testes com determinadas restrições de entrada. Cada subtarefa vale um conjunto de pontos; a soma dos pontos das subtarefas de uma dada tarefa é sempre 100.

Basicamente, você pode pensar que cada subtarefa é a divisão da tarefa em um problema "menor", potencialmente mais fácil de ser resolvido. Note que você pode escrever e submeter programas diferentes para resolver subtarefas diferentes, mas em geral é possível também escrever um único programa que resolve todas as subtarefas de uma dada tarefa.

Para cada subtarefa, sua solução é avaliada com múltiplos casos de teste, diferentes dos mostrados nos enunciados da tarefa, e para cada caso de teste sua solução recebe um número de pontos que depende do resultado da execução de seu programa com o caso de teste.

  1. Para cada submissão a pontuação de cada subtarefa é o menor número de pontos obtido entre todos os casos de teste da subtarefa.
  2. A pontuação final de cada subtarefa é a maior pontuação da subtarefa, entre todas as submissões.
  3. A pontuação final de cada tarefa é a soma das pontuações finais de suas subtarefas.

Por exemplo, considere uma competidora que fez duas submissões para uma tarefa que contém duas subtarefas. Considere ainda que a primeira solução submetida recebeu 30 pontos para a primeira subtarefa e 10 pontos para a segunda subtarefa, e a segunda solução recebeu 0 pontos para a primeira subtarefa e 40 pontos para a segunda subtarefa. Então a pontuação final dessa competidora para essa tarefa é 70 pontos, ou seja, o máximo entre (30, 0), correspondente à primeira subtarefa, somado ao máximo entre (10, 40), correspondente à segunda subtarefa.

4   Resultado da correção

O ambiente de prova executa sua solução usando vários casos de testes, diferentes dos mostrados como exemplos nos enunciados das tarefas. Cada execução usa um caso de teste diferente e executa por um limite máximo de tempo e um limite máximo de uso de memória. Os limites de tempo e memória são estabelecidos para cada tarefa e cada linguagem de programação.

Para resolver corretamente um caso de teste, sua solução deverá:

  • Terminar a execução dentro do tempo limite estabelecido.
  • Não exceder o limite de uso de memória estabelecido.
  • Imprimir a resposta correta, exatamente no mesmo formato descrito na seção "Saída" do enunciado, e nada mais. Por exemplo, se a saída esperada para um caso de teste é "3", então o código precisa imprimir somente "3" para ser considerado correto (imprimir "resposta = 3", por exemplo, seria avaliado como resposta errada).

O resultado da correção de um caso de teste pode ser:

  • Correto: se a solução produziu o resultado correto dentro dos limites de tempo e memória estabelecidos para a tarefa.
  • Incorreto: se a solução
    • produziu um resultado incorreto; ou
    • foi interrompida por exceder o tempo limite ou o limite de memória estabelecido para a tarefa; ou
    • foi interrompida por algum erro durante a execução (acesso inválido à memória, por exemplo).

Se a execução foi interrompida por algum erro durante a execução, nem sempre é possível para o ambiente de prova determinar o tipo de erro que causou a interrupção da execução. Quando o ambiente de prova não consegue determinar a causa do erro, ele emite uma mensagem de erro genérica: "A execução falhou pois o código de retorno foi diferente de zero".

5   Exemplos de soluções para diferentes linguagens

Nesta seção você encontra exemplos de soluções, para ilustrar como a entrada e saída para uma tarefa deve ser feita nas diferentes linguagens.

5.1   Python

Para submeter suas soluções em Python, você deve seguir as seguintes instruções:

  • A entrada de dados é feita pela entrada padrão, a saída deve ser feita na saída padrão.
  • Ao usar a função input() para ler a entrada, não use o parâmetro que escreve uma cadeia de caracteres, ou seja não use por exemplo assim: input('Entre com o valor:'). Isso faz com que a cadeia de caracteres "Entre com o valor:" seja escrita na saída do programa, fazendo com que a saída seja diferente do que o mostrado no exemplo do enunciado da tarefa.

Um pequeno exemplo de programa em Python

O exemplo abaixo lê dois valores inteiros dados em duas linhas e imprime o maior valor.

1# exemplo de solucao em Python3
2
3# le dois valores inteiros
4val1 = input() # NÃO use input("Entre com um valor:")
5val2 = input()
6
7# escreve o resultado
8if val1 > val2:
9 print(val1)
10else:
11 print(val2)

5.2   C++

Para submeter suas soluções em C++, você deve seguir as seguintes instruções:

  • A entrada de dados é feita pela entrada padrão, a saída deve ser feita na saída padrão. Utilize por exemplo cin ou a função scanf para ler da entrada padrão e cout ou a função printf para escrever na saída padrão.
  • A função "main" de seu programa deve retornar o valor 0 ao final da execução.

Um pequeno exemplo de programa em C++

O exemplo abaixo lê dois valores inteiros e imprime o maior desses valores.

1#include <iostream>
2using namespace std;
3
4int val1, val2;
5
6int main(void) {
7 // lê as duas vals
8 cin >> val1 >> val2;
9
10 // escreve o resultado
11 if (val1 > val2)
12 cout << val1 << endl;
13 else
14 cout << val2 << endl;
15
16 // termina a execução
17 return 0;
18}

5.3   C

Para submeter suas soluções em C, você deve seguir as seguintes instruções:

  • A entrada de dados é feita pela entrada padrão, a saída deve ser feita na saída padrão. Utilize por exemplo a função scanf para ler da entrada padrão e a função printf para escrever na saída padrão.
  • A função "main" de seu programa deve obrigatoriamente retornar o valor 0 ao final da execução.

Um pequeno exemplo de programa em C

O exemplo abaixo lê dois valores inteiros e imprime o maior desses valores.

1#include <stdio.h>
2
3int val1, val2;
4
5int main(void) {
6 // lê as duas variáveis
7 scanf("%d%d", &val1, &val2);
8
9 // escreve o resultado
10 if (val1 > val2)
11 printf("%d\n", val1);
12 else
13 printf("%d\n", val2);
14
15 // termina a execução
16 return 0; // importante!
17}

5.4   Java

Para submeter suas soluções em Java, você deve seguir as seguintes instruções:

  • A entrada de dados é feita pela entrada padrão, a saída deve ser feita na saída padrão. Utilize qualquer classe ou função padrão para leitura, como por exemplo Scanner ou BufferedReader, e qualquer classe ou função padrão para escrita, como por exemplo System.out.println ou BufferedWriter.
  • Não use a diretiva package.
  • O nome de sua classe principal pública e do seu arquivo .java deve ser obrigatoriamente o identificador da tarefa com todas as letras em minúsculo, sem acento. O identificador da tarefa é o nome que aparece entre parênteses no título da tarefa no ambiente de prova. Por exemplo, se o identificador da tarefa é "festa", o arquivo deve se chamar festa.java e a classe principal pública deve se chamar festa.

Um pequeno exemplo de programa em Java

O exemplo abaixo lê dois valores inteiros e imprime o maior valor.

1import java.util.Scanner;
2
3public class tarefa {
4
5 public static void main(String[] args) {
6 Scanner in = new Scanner(System.in);
7
8 // lê duas variáveis inteiras
9 int a = in.nextInt();
10 int b = in.nextInt();
11
12 // escreve o resultado
13 if (a > b)
14 System.out.printf("%d\n", a);
15 else
16 System.out.printf("%d\n", b);
17 }
18}

5.4   Blockly

Para submeter suas soluções em Blockly, você deve seguir as seguintes instruções:

  • Para entrada e saída de dados, utilize os blocos do menu E/S.

Um pequeno exemplo de programa em Blockly

O exemplo abaixo lê dois valores inteiros e imprime o maior desses valores.


OBI Logo

Manual EditorOBI

Com o EditorOBI você codifica, testa e submete para correção a sua solução para as tarefas da prova da OBI.

Há três botões na barra de ferramentas principal:

  • Tamanho fonte aumenta ou diminue o tamanho do fonte utilizado.
  • Tema altera o tema do editor para o modo escuro ou claro.
  • Info mostra um pequeno texto sobre como usar o editorOBI.

Abaixo da barra de ferramentas principal há três painéis:

  • Painel Código (à esquerda)
  • Painel Entrada (acima, à direita)
  • Painel Saída (abaixo, à esquerda)

Cada um desses três painéis possui uma barra de ferramentas própria, que serão descritas mais adiante.

Abaixo dos painéis há ainda uma barra de status, com um indicador de status mostrado à direita da barra de status.

Painel Código

O Painel Código é onde você escreve o código de suas soluções. Você pode trabalhar em mais de uma solução, criando novas abas no Painel Código.

Nova Aba

Para criar uma nova aba, clique na aba marcada com "+" (a aba mais à esquerda). Você deve dar um nome para a nova aba. Pode ser qualquer nome: o nome da tarefa, o nome da tarefa seguido de um número de versão, por exemplo.

O nome da aba corrente é destacado em relação às outras abas existentes. Para trabalhar em uma outra aba, clique no nome da aba.

Você pode também editar o nome de uma aba existente, clicando duas vezes no nome da aba.

A barra de ferramentas do Painel Código contém sete botões. Da esquerda para a direita, os botões são

  • Testar
  • Submeter
  • Seletor de Linguagem
  • Salvar
  • Carregar
  • Limpar
  • Tela Cheia ( Tela cheia  )

Seleção de Linguagem

Em cada aba do Painel Código você pode trabalhar em uma linguagem de programação diferente. Para escolher a linguagem usada na aba, use o Seletor de Linguagem; você pode escolher entre C++, Java, Python ou Blockly).

Testar

Antes de submeter sua solução para correção, você deve testá-la com diversas entradas, para certificar-se de que está correta. Algumas entradas são mostradas nos exemplos dos enunciados das tarefas. Além dessas, você deve também testar com outras entradas que você mesmo crie. Procure testar entradas que constituam situações representativas dos limites definidos na tarefa.

Para testar uma solução, escreva a entrada no Painel Entrada e pressione o botão Testar. Você deve informar qual tarefa é o teste, pois os limites de tempo de processamento e de memória utilizados no teste serão os definidos no enunciado da tarefa. Se a execução de seu programa exceder esses limites ela será interrompida.

O código submetido será o conteúdo do Painel Código, e a entrada para o teste será o conteúdo do Painel Entrada. O resultado da execução do teste será mostrado no Painel Saída. A barra de status mostra o progresso da execução do teste ("compilando", "executando",...).

Submeter

Após testar seu código e certificar-se de que está correto, submeta sua solução para correção, utilizando o botão Submeter.

A barra de status mostra o status da submissão. Para consultar o resultado da submissão, você deve utilizar a aba Prova do Ambiente de Prova. Na aba Prova, no menu à esquerda, clique em Submissões para a tarefa em que a solução foi submetida. Note que pode ser necessário recarregar a página Submissões para que a nova submissão seja visualizada. Pare recarregar a página:

  • Chrome
    • Para Windows/Linux:
      • Mantenha pressionado Ctrl e pressione F5; ou
      • Mantenha pressionados Ctrl e Shift, em seguida pressione R.
    • Para MacOS:
      • Mantenha pressionados Ctrl e Shift, em seguida pressione R.
      • Mantenha pressionados Command e Shift, em seguida pressione R.
  • Firefox
    • Para Windows/Linux:
      • Mantenha pressionado Ctrl, em seguida pressione F5.
      • Mantenha pressionados Ctrl e Shift, em seguida pressione R.
    • Para MacOS:
      • Mantenha pressionados Command e Shift, em seguida pressione R.
  • Microsoft Edge
    • Mantenha pressionado Ctrl, em seguida pressione em F5.
  • Safari
    • Mantenha Command e Option pressionados, em seguida pressione R.

Salvar

Você pode salvar até 5 cópias para cada tarefa da prova (ou seja, se o número de tarefas da prova é três, você pode salvar 15 cópias de código). Você deve fornecer um nome para a cópia (pode ser qualquer nome). Se o número de cópias exceder o limite, você deve remover uma das cópias antes de salvar uma nova. Para remover uma cópia, use o botão Carretar, descrito a seguir.

Carregar

Para carregar o Painel Código com uma cópia, pressione o botão Carregar. Será mostrada a lista de cópias disponíveis. Clique numa cópia para restaurar-la. Você pode também remover uma cópia clicando na lixeira que aparece à direita do nome da cópia na lista de cópias disponíveis.

Limpar

Utilize para remover todo o conteúdo do painel código para a aba corrente.

Tela Cheia (  Tela cheia  )

Utilize este botão para expandir o Painel de Código de forma a utilizar toda a área disponível, escondendo os outros painéis. Para desfazer a expansão, clique novamente no botão Tela Cheia.

Painel Entrada

Utilize este painel para definir a entrada de seu teste. Este painel não é utilizado quando você submete uma solução para correção (nesse caso os casos de testes são escondidos!).

Similar ao Painel de Código, o Painel de Entrada possui os botões Salvar, Carregar, Limpar e Tela Cheia, com funções similares.

Painel Saída

Este painel mostra o resultado de seus testes.

Similar ao Painel de Código, o Painel de Saída possui os botões Limpar e Tela Cheia, com funções similares.