MOJ MOJ Melhor Online Judge

🏁 O competidor

🏁
seu-time
Você é quem compete. Seu login não tem sufixo — e é justamente isso que faz de você um time: você lê os problemas, envia soluções, faz perguntas e acompanha o placar.

Escrito para uma prova no molde da Maratona SBC de Programação (ICPC): rodada cronometrada, balões, placar que congela no fim. As telas dos exemplos estão em inglês — o padrão de uma prova internacional; num contest em português, os mesmos botões aparecem traduzidos.

1. Entrar

A organização te dá um usuário e uma senha — normalmente numa etiqueta colada na sua mesa. A prova tem endereço próprio; ao abri-lo você vê o nome da competição, os horários de início e término e o formulário:

A porta de entrada da prova. Antes do início, esta mesma tela mostra apenas uma contagem regressiva — o formulário aparece no minuto marcado.
Você não entra antes de a prova começar. Não existe "dar uma olhada antes": até o minuto marcado a tela tem contagem regressiva e nenhum formulário, e isso não é falha. Também não adianta tentar pelo seu notebook — a prova roda na máquina que a organização preparou, e a checagem de navegador recusa qualquer outra.
Onde você experimenta tudo é o aquecimento (warm-up) — a sessão de treino e teste do sistema que acontece antes da prova, nas mesmas máquinas e com as mesmas telas da prova de verdade. Ela existe justamente para que nada desta página seja novidade quando o relógio começar: entre, abra um problema, envie uma solução de propósito, faça uma clarification, olhe o placar. Qualquer coisa estranha, é ali que você avisa a organização.
Sua sessão não expira por tempo: dá para fechar o navegador e voltar sem logar de novo. Entrar em outra máquina também não derruba esta.

2. A página da prova

Tudo o que você precisa está numa página só, nesta ordem: quem você é, os avisos, os arquivos, os problemas e as suas submissões.

A página da prova inteira. Bem no topo, a faixa amarela é a notificação do que mudou desde a última vez que você olhou.
AbaPara que serve
ContestEsta página: problemas, enunciados, envio.
ScoreO placar.
ClarificationPerguntar aos juízes. O número ao lado é quantas respostas você ainda não leu.
💾 BackupUma gaveta sua no servidor: você guarda arquivos ali para não perder trabalho.
🖨️ PrintingManda um arquivo para a impressora da equipe de sala — só existe se a prova tiver impressão.
O relógio no canto superior direito conta para o fim da prova. O horário de término vem do servidor, mas quem faz a contagem é o relógio da sua máquina — num computador com a hora errada, a contagem sai errada junto. Quem decide é o servidor: submissão que chega depois do fim não conta, diga o que disser a sua tela.

3. A sanfona

Cada problema é uma linha fechada. A setinha à esquerda quer dizer que há algo dobrado ali: clique na linha e ela abre — é isso que chamamos de sanfona. Clique de novo e fecha. Abrir uma não fecha as outras, então dá para deixar dois problemas abertos ao mesmo tempo.

Um problema aberto: enunciado à esquerda, editor à direita, e o seletor que decide quanto você vê de cada um.

Lá dentro, os três botões mudam o arranjo — e o MOJ lembra a sua escolha no próximo problema que você abrir:

BotãoO que você vê
Side by sideEnunciado e editor juntos — é o padrão.
Statement onlyO enunciado em largura cheia, para ler com calma.
Editor onlyO editor em largura cheia, para escrever com calma.
O enunciado também está como HTML e PDF, nos links da própria linha — eles abrem em outra aba, o que ajuda para ler num segundo monitor enquanto você programa no primeiro. E a primeira linha dentro da sanfona é o time limit, um chip por linguagem: C 1 s, Java 2 s, Python 3 s. As linguagens não recebem o mesmo limite — as mais lentas ganham mais tempo, medido na máquina do juiz.

Quando o enunciado é só PDF

Muita prova entrega só o caderno em PDF, sem versão HTML. Ali a linha tem apenas o link PDF, e a sanfona abre com o time limit (e o editor, se houver) e mais nada. Não é tela quebrada: o enunciado está no PDF, e é o PDF que você lê.

O problema H não tem HTML: só o link PDF na linha, e a sanfona aberta mostra apenas o tempo limite e o editor.

4. O editor nem sempre está lá

O editor do navegador é uma conveniência, não parte das regras — e a organização pode desligá-lo. Na Maratona SBC de Programação ele fica desligado: você escreve num editor da própria máquina, compila no terminal e envia o arquivo. E isso não é perda nenhuma — a imagem da prova vem cheia de editores, e se for o Maratona Linux você está muito bem servido: Vim, Emacs, VS Code, CLion e PyCharm — com os compiladores e o depurador já ajustados. Não conte com o editor do navegador antes de conferir.

A mesma sanfona com o editor desligado: o enunciado ocupa a largura toda e não existe seletor de arranjo. Enviar continua funcionando — pelo seletor de arquivo da linha.
Qual das duas telas você tem é coisa que se descobre no aquecimento: abra um problema lá e veja. Se não houver editor, é nessa sessão que você abre o seu editor, compila um hello world no terminal e envia — para que no dia da prova a única novidade seja o problema.

5. Enviar uma solução

Há dois caminhos, e os dois terminam no mesmo botão Submit da linha do problema:

  1. Pelo arquivo — escolha o arquivo que você compilou e aperte Submit. O MOJ deduz a linguagem pela extensão.
  2. Pelo editor — escreva na sanfona, escolha a linguagem no seletor e aperte Submit. Há ainda Fullscreen e New window, para quando a divisão apertar.
O seletor só oferece as linguagens que aquele problema aceita, e o servidor confere de novo na chegada — renomear .py para .c não contorna restrição nenhuma, só faz a submissão ser recusada.

6. Ler o veredicto

Toda submissão cai na lista do fim da página, da mais nova para a mais velha:

Suas submissões. Time é o minuto de prova; Date é a hora do relógio. Os botõezinhos de cima filtram por problema, e o link src baixa de volta o arquivo que você enviou.
VeredictoO que aconteceu
Not Answered YetAinda sendo julgada — ela gira sozinha; não precisa recarregar.
AcceptedResolvido. A linha do problema lá em cima muda de cor.
Wrong AnswerRodou, e a saída não é a esperada.
Time Limit ExceededDemorou mais que o problema permite.
Runtime ErrorQuebrou durante a execução — segfault, divisão por zero, exceção.
Compilation ErrorNem compilou na máquina do juiz.
Numa prova, o veredicto é tudo o que você recebe: sem teste que falhou, sem diff, sem nota parcial. Isso é de propósito — os testes são material de prova. Se a prova permitir, aparece um link log na linha; se ele não aparece, não há o que pedir.
Em algumas provas um humano confirma o veredicto antes de ele chegar até você. Aí uma submissão pode ficar em Not Answered Yet por alguns minutos mesmo com a máquina já tendo terminado. Não está travada.

7. A cor do balão

Cada problema tem um balão de uma cor. No instante em que você o resolve, a linha do problema é pintada naquela cor, ganha o balão e a etiqueta ✔ solved — e, numa prova com equipe de sala, alguém leva um balão de verdade daquela cor até a sua mesa.

A a E resolvidos, cada um na cor do seu balão; F, G e H ainda intocados. Esta é a paleta oficial do ICPC — e repare que o A é branco e o B é preto.

A paleta é a do ICPC e vai na ordem das letras — A branco, B preto, C vermelho, D bordô, E amarelo, F verde, G azul, H azul-marinho, e assim por diante. A cor não é enfeite: é o que faz a sala enxergar de longe quem resolveu o quê, e é a cor do balão que amarram na sua cadeira.

Mas quem diz resolvido é a etiqueta ✔ e o balão, nunca a cor sozinha — o A é branco numa página branca, e o B é preto. No celular a célula mostra um ✓ no lugar dos números, pela mesma razão.

8. Avisos e documentos

Duas seções ficam entre você e os problemas, e as duas merecem uma lida antes de começar a programar.

Info & News é o alto-falante da organização: almoço, prorrogação, correção de enunciado. Ninguém precisa perguntar para aquilo aparecer — ele simplesmente surge, e a faixa amarela do topo avisa que há novidade.

Files & Resources é onde os documentos da prova aparecem conforme a organização os publica: o info sheet (o ambiente — compiladores, versões, flags, o que está instalado), a folha de time limits, o caderno de problemas e, depois do fim, o editorial. Cada linha oferece os idiomas em que ela existe (PT, EN…).

Seção vazia não aparece. Então sem a seção de documentos quer dizer que a organização ainda não publicou nada — não que sua tela está quebrada. Os documentos também vão surgindo conforme são liberados: o caderno só depois do início, o editorial só depois do fim.

9. Clarifications

Uma clarification é uma pergunta aos juízes sobre um problema — em geral uma ambiguidade do enunciado. Você escreve, eles respondem, e a resposta pode ir para todo mundo.

A página de clarifications: o formulário em cima, as respostas embaixo. A primeira é um official notice — uma resposta que ninguém precisou perguntar.
  • Escolha o problema (ou General, para algo que não é de um problema específico) e escreva a pergunta. Seja específico: “no B, o labirinto pode ter mais de uma saída?” é respondível; “não entendi o B” não é.
  • Você é anônimo para os juízes. Eles veem a pergunta, não quem perguntou — então perguntar não marca o seu time.
  • Resposta pública vai para todos. Se a sua pergunta serve à sala, a resposta aparece para todos os times; se é só do seu caso, só você a vê. É por isso que a lista tem respostas que você não pediu.
  • “Leia o enunciado” é uma resposta comum — e é resposta de verdade: quer dizer que a informação já está lá.

E a notificação é assim — você não precisa ficar com a página aberta para saber:

A faixa amarela no topo da página da prova, e o número ao lado de Clarification no menu. A faixa pisca enquanto houver resposta não lida; clicar nela te leva até lá e apaga a marca.
A marca de lido fica no navegador daquela máquina. Trocar de computador pode fazer o aviso voltar — não quer dizer que chegou resposta nova.

10. Ler o placar

O placar, congelado. Uma coluna por problema, com o balão dele no cabeçalho — e cada célula resolvida pintada na cor daquele balão.

Célula resolvida sai na cor do problema: vermelha no C, amarela no E, azul no G. Uma passada de olho na sua linha já diz quais balões você tem. Cada célula é o que o seu time fez naquele problema:

CélulaO que quer dizer
na cor do problema, 1/12Resolvido na 1ª tentativa, no minuto 12 de prova.
na cor do problema, 2/45Resolvido na 2ª tentativa, no minuto 45 — a primeira estava errada.
laranja, 2/-Duas tentativas, não resolvido. Tentativa nunca ganha a cor do balão — essa se conquista.
vaziaNunca tentou.
Primeiro time a resolver aquele problema em toda a prova — a célula ainda ganha um anel em volta.
Algumas provas mostram a célula num verde neutro com um pontinho colorido em vez de pintá-la — é a mesma informação, escolha da organização. E nos dois estilos o A branco e o B preto ganham um contorno fino: sem ele uma célula branca numa tabela branca não pareceria nada.

A classificação é por Total (problemas resolvidos) primeiro. No empate, ganha quem tem a menor Pen. — e a penalidade é a soma, sobre os problemas resolvidos, do minuto da submissão aceita mais uma multa fixa por cada tentativa errada anterior. Tentativa errada em problema que você nunca resolveu não custa nada.

Placar congelado. Perto do fim o placar deixa de mostrar resultados — o aviso do topo diz desde quando. Todos veem a classificação como ela estava naquele minuto, e ninguém sabe a ordem real até a cerimônia. Suas submissões continuam sendo julgadas normalmente: o que congela é a exibição, não a prova. Continue resolvendo. Na foto acima é exatamente o caso do D do primeiro colocado: ele resolveu no minuto 117, está lá na lista de submissões dele com Accepted, e a coluna congelada não mostra nada.
A barra acima da tabela filtra por país, universidade, sede ou nome — ela só esconde linhas, nunca renumera. O contador da direita diz quantos times estão aparecendo.

11. Impressão, backup e CLI

🖨️ Impressão

Ler código no papel pega o que a tela esconde. Na aba 🖨️ Printing você escolhe o arquivo (código-fonte, texto, imagem ou PDF, até 10 MB) e aperta Request printing: a equipe de sala imprime e leva até a sua mesa. Sai com uma folha de rosto com o nome do seu time e um número de conferência, para nada ser entregue na mesa errada. Código-fonte sai em fonte monoespaçada, com a sua indentação e as linhas numeradas, e cada página repete o login do seu time e o nome do arquivo — uma folha que se solta do bolo ainda acha o caminho de volta até você.

O formulário em cima e os seus pedidos embaixo, cada um com o estado: pending (na fila), processed (impressa) e delivered (na sua mão). Você só vê os seus.
Se a aba não está no menu, esta prova não tem impressão — ou não há equipe de sala, ou a organização a desligou.

💾 Backup

A aba 💾 Backup é uma gaveta sua no servidor: escolha um arquivo, aperte Store file, e ele fica lá para você baixar de volta quando quiser. Serve para não perder trabalho — a versão que estava funcionando antes de você reescrever tudo, a máquina que resolve morrer no minuto 150. Não conta como submissão e mais ninguém vê.

O envio em cima, seus arquivos embaixo — nome, tamanho e hora, com download e o ✕ para remover. 10 MB por arquivo.
Não é automático: o que você não subir, não está guardado. Pegue o hábito antes de cada reescrita arriscada, não depois de a máquina morrer.

⌨ A CLI do competidor

Existe um cliente de terminal, moj-comp, que envia e acompanha veredictos e placar sem navegador, e que aguenta queda de rede (guarda a submissão assinada com o horário e entrega quando o link volta). Ele nem sempre está habilitado: se vale ou não naquela prova é decisão da organização do evento, e é dela que essa informação vem — não presuma que está ligado. Veja a página da CLI.

12. Resumo

QuandoO que fazer
No aquecimentoEntre, abra um problema e veja se você tem o editor do navegador — e, se não tiver, qual editor da máquina você vai usar. Envie algo de propósito. Leia o info sheet.
DuranteClique na linha para abrir o enunciado, envie, acompanhe o veredicto. Peça clarification quando o enunciado for mesmo ambíguo.
Faixa amarela apareceuLeia — ou é aviso da organização, ou é clarification respondida.
Placar parouEstá congelado, não quebrado. Suas submissões seguem sendo julgadas.
Antes de reescrever a soluçãoGuarde a versão que funciona na gaveta do Backup.

📖 Como enviar (entrada, saída e o código inicial de cada linguagem) · Manual completo do competidor · ⌨ CLI do competidor · Os outros papéis →