Olimpíada Brasileira de Informática

Treino para a OBI com casos de teste

Escreva a sua solução, coloque os exemplos do enunciado como casos de teste e veja na hora quais passam. Grátis, sem cadastro, em C, C++, Java e Python, as linguagens da modalidade Programação.

Pela equipe do OnlineCompiler.io. Atualizado em .

O que é a OBI

A Olimpíada Brasileira de Informática (OBI) é uma competição da Sociedade Brasileira de Computação, coordenada pelo Instituto de Computação da Unicamp e aberta, de graça, a estudantes do 4º ano do Ensino Fundamental ao primeiro ano da faculdade. Na modalidade Programação, você resolve tarefas escrevendo programas que são corrigidos automaticamente, com entradas que você não vê, em três fases: Local, Estadual e Nacional. Os melhores do Nível 2 disputam a seletiva para a Olimpíada Internacional de Informática (IOI).

Em 2026, a Programação teve cinco níveis: Mirim (até o 7º ano), Júnior (8º e 9º anos), Nível 1 (Ensino Fundamental e 1º ano do Médio), Nível 2 (até o 3º ano do Médio) e Sênior (4º ano do técnico ou primeiro ano da faculdade). A modalidade Iniciação é uma prova de lógica no papel, sem programar.

A OBI2026 já terminou: os resultados finais saíram em 22 de outubro. As datas da OBI2027 ainda não foram publicadas. Para se planejar: em 2026, as inscrições abriram em 6 de março, a Fase 1 de Programação foi de 10 a 12 de junho, a Fase 2 em 20 e 21 de agosto e a Fase 3, a nacional, em 3 de outubro. Confira sempre o calendário oficial.

Problema de exemplo: Dias de sol

Um problema curto no estilo da Fase 1, escrito por nós para este treino (não saiu de nenhuma prova da OBI). O editor já vem com uma solução em Python. Aperte Rodar testes e veja os três exemplos passarem; depois mude o código ou os testes e veja o que acontece.

Dias de sol

Lia anotou a chuva da cidade dela durante N dias seguidos: no dia i choveu Ci milímetros, e Ci = 0 quer dizer que não choveu. Ela quer saber qual foi a maior sequência de dias seguidos sem chuva.

Entrada

A primeira linha contém um inteiro N, o número de dias. A segunda linha contém N inteiros C1, C2, …, CN, separados por espaços.

Saída

Seu programa deve imprimir uma única linha com um inteiro: o maior número de dias seguidos sem chuva, ou 0 se choveu todos os dias.

Restrições

  • 1 ≤ N ≤ 100.000
  • 0 ≤ Ci ≤ 1.000

Exemplos

Entrada 1

8
0 3 0 0 0 5 0 0

Saída 1

3

Entrada 2

4
2 2 1 7

Saída 2

0

Entrada 3

5
0 0 0 0 0

Saída 3

5
import sys

# Lê toda a entrada de uma vez: bem mais rápido que input() quando N é grande
dados = sys.stdin.buffer.read().split()
n = int(dados[0])

maior = 0  # a maior sequência de dias sem chuva até agora
atual = 0  # quantos dias seguidos sem chuva terminam no dia atual
for c in dados[1:n + 1]:
    if int(c) == 0:
        atual += 1
        maior = max(maior, atual)
    else:
        atual = 0

print(maior)

Casos de teste

Até 8 testes. Cada um roda o código acima com a sua própria entrada.

  1. Teste 1

  2. Teste 2

  3. Teste 3

Para treinar em C++, escolha C++ no menu do editor e cole esta versão. Os testes continuam valendo.

C++
#include <bits/stdc++.h>
using namespace std;

int main() {
    // Deixa cin e cout tão rápidos quanto scanf e printf
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    int maior = 0, atual = 0;
    for (int i = 0; i < n; i++) {
        int c;
        cin >> c;
        if (c == 0) {
            atual++;
            maior = max(maior, atual);
        } else {
            atual = 0;
        }
    }
    cout << maior << "\n";
    return 0;
}

Como treinar com casos de teste

  1. Copie os exemplos do enunciado como testes: cada exemplo vira uma entrada e a sua saída esperada. Cabem até 8 testes por vez.
  2. Leia da entrada padrão e escreva na saída padrão, como a OBI pede. Nada de arquivos e nada de mensagens como Digite N:, que entram na saída e reprovam o teste.
  3. Invente testes para os casos que mais derrubam soluções: o menor N, os maiores valores permitidos, todos os valores iguais e o caso em que a resposta é 0 (no exemplo, chover todos os dias).
  4. Aperte Rodar testes. Cada teste mostra se passou e, quando não passa, o que o seu programa imprimiu.

A comparação padrão ignora espaços no fim das linhas e linhas em branco no final, como a maioria dos corretores. Para rodar um programa uma vez só, com uma entrada, use o compilador C++ online ou o compilador Python online.

Tempo limite e eficiência

Aqui cada teste roda por até 2 segundos (Java ganha mais 1 s para a JVM iniciar), com 512 MB de memória. O regulamento da OBI não publica limites de tempo e de memória, mas o caderno de tarefas avisa que a eficiência conta na correção e que as soluções são testadas com outras entradas além dos exemplos. Por isso, olhe as restrições antes de programar: com N até 100.000, comparar todos os pares de dias dá uns 5 bilhões de comparações e estoura o tempo, enquanto a solução do exemplo passa pela lista uma vez só.

O tempo medido aqui não é o das máquinas da OBI. Use para comparar duas soluções suas, não como garantia.

Ler a entrada rápido em C++ e Python

Com dezenas de milhares de números na entrada, a forma de ler já faz diferença.

C++: no começo do main, desligue a sincronização do cin com o C, ou use scanf e printf (sem misturar os dois jeitos depois disso). E troque endl por "\n", porque o endl descarrega a saída a cada linha.

C++
ios::sync_with_stdio(false);  // cin e cout sem sincronizar com scanf e printf
cin.tie(nullptr);             // cin não esvazia o cout antes de cada leitura

int n;
cin >> n;
cout << n << "\n";            // "\n" em vez de endl

Python: leia tudo de uma vez em vez de chamar input() milhares de vezes, e imprima as respostas juntas no final. Se preferir ler linha por linha, sys.stdin.readline também é bem mais rápido que input().

Python
import sys

dados = sys.stdin.buffer.read().split()   # todos os números da entrada, de uma vez
n = int(dados[0])
valores = list(map(int, dados[1:n + 1]))

respostas = [str(v * 2) for v in valores]
print("\n".join(respostas))               # uma escrita só, no final

As linguagens da OBI aqui

O regulamento de 2026 aceita C, C++, Java e Python nas três fases (na seletiva da IOI, só C++). As quatro rodam aqui, mas nem sempre com a mesma versão e as mesmas opções do corretor da OBI:

LinguagemNa OBI (regulamento 2026)AquiO que muda
CGCC 15.2 ou mais novo: gcc -lm -O2 -staticGCC 15: gcc -O2 code.c -o code.out -lmQuase nada. Os dois usam -O2, e nenhum escolhe o padrão da linguagem, então valem os recursos do GNU C23, o padrão do GCC 15. O -static não muda o que o programa imprime.
C++G++ 15.2 ou mais novo: g++ -std=gnu++20 -O2 -staticG++ 15: g++ -O2 -Wall code.cc -o code.out, no padrão GNU C++17Aqui não há C++20: set::contains, std::popcount e std::ranges dão erro de compilação aqui e funcionam na OBI. Use count() e __builtin_popcount, que funcionam nos dois. Código C++17 compila nos dois.
PythonPython 3.10.10 ou mais novoPython 3.14Aqui há recursos que o corretor pode não ter, se ele estiver no 3.10. Por exemplo, f-strings com as mesmas aspas dentro, como f"{d["x"]}", e itertools.batched só existem a partir do Python 3.12.
JavaJDK 14 ou mais novo, executado com java -Xmx1024m -Xms1024mOpenJDK 25, com heap de até 60% dos 512 MBAqui o heap é menor, então um programa que usa muita memória pode falhar aqui e passar na OBI. E recursos mais novos que o Java 14, como record (Java 16), podem não compilar no corretor da OBI. Lá, a classe principal tem o nome do arquivo, em minúsculas e sem package; aqui esse nome também funciona.

Os cadernos de tarefas de 2026 ainda citam arquivos .js nas instruções, mas o regulamento lista só as quatro linguagens acima. JavaScript roda aqui no Node.js 24; antes de usar na prova, confirme com o coordenador da OBI na sua escola.

Esta página não é o corretor da OBI. Aqui não há testes escondidos nem subtarefas, e o tempo medido não é o das máquinas da prova. Para treinar com tarefas de provas anteriores e um corretor de verdade, use o Pratique do site da OBI. Se você está começando, o site também tem cursos grátis de programação no ambiente Saci.

Para professores e técnicos

Tudo nesta seção é grátis. A documentação de cada recurso está em inglês.

Mandar um código para a turma

Nas páginas de compilador em inglês, como a de C++ e a de Python, o botão Share gera um link com o código e a entrada, sem precisar de conta. O link vale por 90 dias; com Save, fica guardado na sua conta. Ele leva o código e uma entrada, não os casos de teste.

Colocar o editor no site da escola

O editor desta página é um widget que você pode colocar no site da escola ou do curso, com uma conta grátis e um trecho de HTML. Com data-locale="pt", os botões aparecem em português. Veja como incorporar o editor e a referência do widget (em inglês).

Um corretor de treino para a sua turma

A API run-tests (em inglês) recebe o código e uma lista de testes e devolve o veredito de cada teste e uma nota de 0 a 100; é ela que esta página usa. Testes marcados como hidden devolvem só o veredito, como num corretor de verdade, e o tempo limite de cada teste vai até 30 segundos. O plano Free inclui 100.000 execuções por mês (cada teste conta como uma) e até 8 testes por requisição. Para montar o juiz da turma, veja como construir um juiz online (em inglês). Se a escola usa Moodle, o CodeRunner também funciona com a nossa API.

Perguntas frequentes

Esta página é o corretor oficial da OBI?

Não. É uma ferramenta independente para treinar: você roda a sua solução contra os testes que escrever e vê na hora quais passam. Na prova e no Pratique, as soluções vão para o sistema da própria OBI, que corrige com testes que você não vê.

Quais linguagens posso usar na OBI?

Pelo regulamento de 2026, C, C++, Java e Python, nas três fases. Na seletiva para a IOI, só C++. As quatro rodam aqui; a tabela desta página mostra as diferenças de versão e de opções do compilador.

Por que meu código C++ compila na OBI e dá erro aqui?

Provavelmente ele usa um recurso do C++20, como set::contains ou std::ranges. A OBI compila com -std=gnu++20, e aqui o g++ usa o padrão dele, GNU C++17. Troque o recurso por um equivalente do C++17, como count() no lugar de contains().

Qual é o tempo limite aqui?

2 segundos por teste, com 512 MB de memória (Java ganha mais 1 s para iniciar). O regulamento da OBI não publica limites de tempo, então use as restrições de cada tarefa para estimar quantas operações a sua solução pode fazer.

Preciso criar conta?

Não. Para rodar código e testes nesta página você não precisa de conta, e não há anúncios. A conta, que é grátis, só é necessária para usar a API ou colocar o editor no site da escola.

Quando é a próxima OBI?

As datas da OBI2027 ainda não tinham sido publicadas em 2 de novembro de 2026. Em 2026, as inscrições abriram em março e a Fase 1 de Programação foi em junho, então vale começar a treinar no início do ano. Acompanhe o calendário no site oficial da OBI.

Dá para treinar a modalidade Iniciação aqui?

Não. A Iniciação é uma prova de lógica de múltipla escolha, feita no papel, sem programar. Para ela, use as provas de anos anteriores no site da OBI.