📖 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.
- Entrada e saída (o mais importante)
- A extensão é a linguagem
- Tabela de linguagens
- Template de código de cada linguagem
- Avisos que valem a leitura
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:
-
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. -
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.