Roteiro de treinamento para as contas .cstaff e .staff
Maratona de Programação — contest de ensaio mdp-teste-2026
Este roteiro leva cerca de trinta minutos e serve para uma coisa só: fazer a sua sede passar uma vez por tudo o que vai acontecer no dia da prova. Um time entra, resolve um problema, erra de propósito e pede uma impressão. Você vê o pedido chegar, imprime, entrega e vê o balão nascer. Nada disso vale nota — o contest se chama ensaio porque é exatamente isso.
O que dá errado no dia da prova quase nunca é o juiz. É a impressora sem papel, o pop-up bloqueado no navegador, a etiqueta que não loga, o balão da cor errada. Todos esses aparecem aqui, hoje, quando ainda dá para resolver com calma.
.staff): uma que enxergue a impressora da sala. Essa
não é o Maratona Linux: a imagem da prova não é feita para imprimir. Pode ser
Windows, macOS ou um Linux qualquer — o que importa é que a impressora esteja instalada e
funcionando nela;.cstaff entra de qualquer máquina: ele só olha, e olhar não precisa de
impressora nem de imagem de prova;<sede>.cstaff e
<sede>.staff — por exemplo, bolapa.cstaff e
bolapa.staff;https://mdp-teste-2026.moj.naquadah.com.br/| Conta | No ensaio |
|---|---|
.cstaff — chefe de sede | Entrega a credencial ao time e acompanha. Ele
vê a fila, mas não pega nem imprime: essas ações são do .staff. |
.staff — equipe de sala | Pega a tarefa, imprime, entrega o papel e o balão. É a conta que trabalha. |
| o time | Uma conta de time da sua sede, emprestada para o ensaio. |
Se você ainda não leu o guia do seu papel, leia antes: lá cada botão é explicado, e aqui a gente só usa. Guia do chefe de sede · Guia da equipe de sala.
.cstaff: entre no contest e abra 🏷️ Badges. Essa tela lista os times da sua sede com o login e a senha, prontos para imprimir em etiqueta. Escolha um time para o ensaio e anote a credencial dele.
Se a lista vier vazia, pare aqui e fale com a organização: o escopo da sua sede não está configurado, e no dia da prova você ficaria sem as credenciais.
Time: na máquina com Maratona Linux, abra o endereço do ensaio e entre com a credencial do passo 1. Sente alguém de verdade na cadeira, mesmo que seja você: o ensaio só serve se a máquina do ensaio for a máquina da prova.
Neste contest não existe editor no navegador, e isso é de propósito: é assim na Maratona. O time escreve o programa num editor da própria máquina, compila no terminal e envia o arquivo pronto.
O problema A — Ola Mundo não lê nada e imprime uma linha. Copie o programa do Apêndice A na linguagem que você preferir, salve num arquivo e envie: clique na linha do problema A, escolha o arquivo e aperte Submit.
Em poucos segundos o veredicto chega sozinho, sem recarregar a página. O que você quer ver é Accepted, e a linha do problema A muda de cor lá em cima.
Agora mande três programas errados, um de cada tipo. O objetivo é a sede reconhecer cada veredicto quando ele aparecer no dia da prova, e saber que nenhum deles é defeito do sistema. Os programas estão no Apêndice B.
| Envie | No problema | Você vai ver | Quer dizer |
|---|---|---|---|
| a soma trocada | B — Soma 2 | Wrong Answer | O programa rodou até o fim, e a resposta não é a esperada. |
| a saída com erro | C — Soma N | Runtime Error | O programa quebrou durante a execução. |
| o laço infinito | D — EOF | Time Limit Exceeded | O programa passou do tempo que o problema permite. |
Numa prova, o veredicto é tudo o que o time recebe: nada de qual teste falhou, nada de diff, nada de nota parcial. Isso é de propósito — os testes são material de prova.
Time: abra a aba 🖨️ Printing, escolha o arquivo que você acabou de enviar e aperte Request printing. O pedido aparece logo abaixo, como pending.
Um detalhe que vale saber agora: o time só vê os pedidos dele, e o número que aparece ao lado é o mesmo que sai impresso na folha de rosto. É por ele que vocês conferem, na mesa, se o papel foi para o time certo.
.staff: na máquina que tem a impressora — Windows, macOS ou qualquer Linux, nunca o Maratona Linux —, abra 🖨️ Print queue. O pedido do passo 5 está lá, no alto da fila.
O ciclo tem três passos, sempre na mesma ordem:
O que sai na impressora é uma folha de rosto seguida do documento do time. A folha traz o nome do time, a universidade, o login e o número da tarefa, com uma linha para assinar a entrega.
Depois dela vem o código, em fonte monoespaçada, com a indentação do time e as linhas numeradas. Repare no alto e no rodapé de cada página: em cima ficam a data e o nome do arquivo, embaixo ficam o login do time, o arquivo de novo e o número da tarefa. É o que salva o dia quando uma folha se solta do bolo — e, com trinta impressões na mesa, uma sempre se solta.
O texto dessa folha sai em português, em qualquer sede — foi feito assim de propósito, para que a mesa de entrega reconheça o mesmo papel em todo o continente. O nome da cor do balão vem nos dois idiomas, justamente para casar com o balão físico.
Lembra do Accepted do passo 3? Ele virou uma tarefa de balão, e ela aparece na mesma fila, marcada com 🎈 e com a cor do problema. E repare em quando ela nasce: o balão só é criado quando alguém da sede abre a fila. Se ninguém abrir, ele não existe — não é atraso do sistema.
Trate o balão como qualquer outra tarefa: Claim, Print, e Delivered quando o balão chegar à mesa. Leve a folha junto com o balão — é ela que prova a entrega.
Cada cor pertence a uma letra, e a mesma letra tem a mesma cor em todas as sedes. Confira as cores dos seus balões contra a folha antes da prova começar.
Numa prova cheia, parar em cada diálogo de impressão é o que atrasa a sala. Por isso existe o modo automático: a caixinha no alto da fila. Com ela ligada, cada tarefa nova é reservada, impressa e marcada sozinha. Sobra para vocês só a caminhada até a mesa.
Para o papel sair sem nenhum diálogo, o navegador precisa estar em modo kiosk printing. Feche o Chrome e abra de novo assim:
Linux google-chrome --kiosk-printing https://mdp-teste-2026.moj.naquadah.com.br/contest/staff/ Windows (Menu Iniciar → botão direito no Chrome → Propriedades → Destino) "C:\Program Files\Google\Chrome\Application\chrome.exe" --kiosk-printing macOS open -a "Google Chrome" --args --kiosk-printing
Com o Chrome nesse modo, ligue a caixinha, peça outra impressão pela janela do time e não toque em nada. O papel sai sozinho. É assim que a sala roda no dia.
Teste isso hoje. O modo kiosk usa a impressora que estiver como padrão no sistema, e não pergunta mais nada. Se a padrão for a errada, você descobre agora — e não com trinta times na fila.
.cstaff: abra a mesma fila. Você vê tudo o que a sua equipe vê, com uma diferença: a coluna de ações fica vazia. Isso não é falta de permissão por engano, é o desenho do papel — quem pega e imprime é a equipe de sala.
Aproveite e confirme as duas coisas que só você enxerga. A primeira: a fila mostra os times da sua sede e só eles. A segunda: as etiquetas do passo 1 batem com quem vai sentar na sala.
Marque cada linha só depois de ter visto acontecer:
| Item | |
|---|---|
| ☐ | O time entrou de uma máquina com Maratona Linux. |
| ☐ | A conta .staff está numa máquina que imprime — e não é o Maratona Linux. |
| ☐ | As etiquetas da minha sede abrem, e a lista tem os meus times. |
| ☐ | Um time entrou com a credencial da etiqueta. |
| ☐ | Uma submissão voltou Accepted. |
| ☐ | Vi os três erros: Wrong Answer, Runtime Error e Time Limit Exceeded. |
| ☐ | Um pedido de impressão saiu na impressora, com a folha de rosto. |
| ☐ | Os pop-ups deste site estão liberados no navegador da sede. |
| ☐ | O modo automático imprimiu sozinho, com o Chrome em kiosk. |
| ☐ | A tarefa de balão apareceu e a cor bate com os balões que temos aqui. |
| ☐ | Marquei uma tarefa como Delivered. |
| ☐ | A impressora padrão do sistema é a da sala. |
| O que você vê | O que é |
|---|---|
| Apertei Print e nada aconteceu | O navegador bloqueou o pop-up. Libere os pop-ups deste site e aperte de novo — a tarefa continua lá, sem marca de impressa. |
| A fila está vazia | Ou ninguém pediu nada, ou o escopo da sua sede não casa com nenhum time. Peça ao chefe de sede para conferir as etiquetas: se elas também estiverem vazias, é o escopo. |
403 ao pegar ou imprimir | Você está na conta .cstaff. Pegar
e imprimir são da conta .staff. |
| O time não consegue trabalhar na máquina | Confira se a máquina é mesmo a do Maratona Linux. Editor que falta, compilador que não existe e caminho diferente são problema de máquina, não do juiz — e é para achá-los hoje que o ensaio existe. |
| A sede não acha a impressora | A conta .staff está na máquina errada. Ela tem de rodar onde a impressora da sala está instalada — Windows, macOS ou um Linux qualquer. O Maratona Linux é a máquina do time, não a do balcão. |
| A credencial não loga | Confira maiúsculas e minúsculas, e que a etiqueta é da sua sede. Se persistir, é caso para a organização — anote o login e avise. |
| O veredicto demora | Enquanto está Not Answered Yet, a submissão está na fila do juiz. Numa prova cheia isso leva alguns segundos, não minutos. |
| Saiu papel sem a folha de rosto | Alguém imprimiu pelo Open PDF, que abre sem imprimir nem marcar. O botão do fluxo é o Print. |
| Um programa que quebrou voltou Time Limit Exceeded | Acontece. O limite destes problemas é curtíssimo, e salvar a memória de um processo que estourou já passa dele. O relógio bate antes de o juiz olhar o motivo da queda. |
Um por problema, na linguagem que a sua sede preferir. Salve com o nome indicado: em Java, o nome do arquivo tem de ser o nome da classe pública.
/* sol.c */
#include <stdio.h>
int main(void) { printf("Ola Mundo\n"); return 0; }
# sol.py
print("Ola Mundo")
// Main.java
public class Main {
public static void main(String[] args) { System.out.println("Ola Mundo"); }
}
/* sol.c */
#include <stdio.h>
int main(void) {
long a, b;
scanf("%ld %ld", &a, &b);
printf("%ld\n", a + b);
return 0;
}
# sol.py import sys a, b = map(int, sys.stdin.read().split()) print(a + b)
/* sol.c */
#include <stdio.h>
int main(void) {
long n, x, soma = 0;
scanf("%ld", &n);
for (long i = 0; i < n; i++) { scanf("%ld", &x); soma += x; }
printf("%ld\n", soma);
return 0;
}
# sol.py import sys nums = list(map(int, sys.stdin.read().split())) print(sum(nums[1:1 + nums[0]]))
/* sol.c */
#include <stdio.h>
int main(void) {
long x, quantos = 0;
while (scanf("%ld", &x) == 1) quantos++;
printf("%ld\n", quantos);
return 0;
}
# sol.py import sys print(len(sys.stdin.read().split()))
O programa roda até o fim, imprime um número, e o número está errado.
/* wa.c — multiplica em vez de somar */
#include <stdio.h>
int main(void) {
long a, b;
scanf("%ld %ld", &a, &b);
printf("%ld\n", a * b);
return 0;
}
# wa.py import sys a, b = map(int, sys.stdin.read().split()) print(a * b)
O programa não chega ao fim: ele para no meio, anunciando erro. É o que acontece de verdade quando um vetor estoura, uma divisão dá zero no divisor ou uma exceção não é tratada.
/* rte.c */
#include <stdio.h>
#include <stdlib.h>
int main(void) {
long n;
scanf("%ld", &n);
exit(1); /* sair com qualquer coisa diferente de zero é "deu errado" */
}
# rte.py import sys n = int(sys.stdin.readline()) sys.exit(1)
O programa nunca termina. O juiz corta e devolve o veredicto.
/* tle.c */
int main(void) { while (1) { } return 0; }
# tle.py
while True:
pass