📖 Como enviar uma solução

Tudo o que você precisa antes de enviar a sua primeira solução: como funcionam a entrada e a saída, quais linguagens existem, e o esqueleto de código de cada uma.

1. Entrada e saída (o mais importante)

No MOJ, todo problema lê da entrada padrão (stdin) e escreve na saída padrão (stdout), como em maratona de programação. O seu programa nunca abre arquivo. Ele lê o que chega, calcula e imprime a resposta.

Na sua máquina, é como se você digitasse a entrada e visse a resposta aparecer na tela. O juiz faz o mesmo, automaticamente: alimenta o seu programa com uma entrada e compara, linha a linha, o que você imprimiu com a saída esperada.

Os exemplos que aparecem no enunciado são exatamente esses pares. Todos os códigos desta página resolvem o mesmo probleminha: leia N, leia M, imprima 2*M - N.

Entrada

13
16

Saída

19

Por quê

N = 13 e M = 16, então a resposta é 2*16 - 13 = 19. Repare que o programa faz três coisas: lê do stdin, calcula, imprime no stdout.

2. A extensão é a linguagem

Há duas formas de enviar uma solução, e cada uma decide a linguagem de um jeito:

  1. Digitando no editor. Você escreve o código na tela e escolhe a linguagem no menu. Ao enviar, o seu código vira um arquivo chamado solution.<extensão>, e o menu decide a linguagem.
  2. Enviando um arquivo. Você anexa um arquivo pronto (por exemplo sol.cpp). Nesse caso a extensão do arquivo decide a linguagem, e o menu é ignorado.

Resumindo: a extensão é o id da linguagem. Terminou em .cpp, o juiz usa C++. Terminou em .py, usa Python. A coluna id da tabela abaixo é exatamente essa extensão.

3. Tabela de linguagens

A linguagem padrão é C. Esta tabela é gerada da mesma lista que o menu de submissão usa, então ela nunca fica desatualizada.

4. Template de código de cada linguagem

Escolha uma linguagem para ver duas coisas: o esqueleto que o editor te dá (exatamente o que aparece quando você escolhe aquela linguagem) e uma solução completa do probleminha acima, mostrando a leitura e a impressão funcionando.

5. Avisos que valem a leitura

Java: a armadilha da classe public

Quando você digita Java no editor, o envio vira solution.java. Em Java, uma classe public precisa ter o mesmo nome do arquivo. Por isso o esqueleto do editor vem com a classe sem public (class Main { … }): assim funciona tanto no editor quanto por upload de arquivo.

Se você escrever public class Main no editor, o resultado é Compilation Error, porque o arquivo é solution.java e não Main.java. Kotlin, C#, Go e Rust não têm essa regra de nome de arquivo. Só o Java tem.

.pl é Prolog, e não Perl

A extensão .pl também é usada por Perl, mas no MOJ pl é Prolog (SWI-Prolog). Defina um predicado main. Código Perl enviado como .pl não vai rodar como Perl.

Python é pypy3

Python roda em pypy3, não no CPython. Ele é bem mais rápido para o tipo de laço que aparece em problema. Uma consequência: erro de sintaxe vira Compilation Error, e não Runtime Error.

Memória e pilha

Todas as linguagens rodam com pilha de 128 MB, então recursão profunda em geral passa. Na JVM (Java, Kotlin) o limite de memória do problema é aplicado como -Xmx.

A seguir: navegue pelos problemas do Treino Livre e envie a sua primeira solução.