Acesse aqui para saber mais sobre o evento.
A Maratona de Programação dos Calouros será disputada em times de 3 pessoas, com uma duração de 4 horas e com 12 problemas para serem resolvidos.
Para a competição será fornecida para cada integrante do time uma cópia impressa do caderno de questões. Esse caderno conterá 12 questões não necessáriamente ordenadas por dificuldade. Leia com atenção as instruções contidas nesse caderno.
A prova terá início às 14h e terminará às 18h (4 horas totais de duração). O tempo de duração da prova é automatizado, por isso após as 4 horas de duração a prova será encerrada automaticamente e nenhuma solução passará a ser aceita.
Não existe distinção no valor das questões, apenas é levado em consideração a quantidade de questões corretas e o tempo gasto pelo time para computar sua colocação geral (Veja a seção Classificação).
Cada questão apresenta dois conjuntos de casos de teste. O conjunto de casos de exemplo são os apresentados no próprio caderno de questões e são úteis para o time testar a compreensão do problema. O outro conjunto de testes são os fechados. Como o nome sugere, os casos fechados não serão disponibilizados para os participantes. É importante destacar que para uma solução ser considerada correta ela deve produzir a saída esperada para todos os casos de teste de ambos os conjuntos, caso algum caso de teste tenha uma saída diferente da esperada o veredito final para aquele código será de incorreto (Veja a seção Submissão e Correção dos problemas).
Uma coisa importante de se destacar é que casos teste de borda normalmente são inseridos no conjunto de testes fechados. O intuito disso é estimular que o time pense nas possíveis entradas problemáticas que seu código terá que lidar. Chamamos de caso de borda, um caso pensado justamente para explorar algum detalhe não tão óbvio do problema.
Cada time terá acesso a um computador apenas. Porém, não é permitido acessar a internet (exceto pelo sistema da competição) nem usar material impresso.
A correção de cada problema resolvido pelo time é feita da maneira automática por um software que é conhecido como juíz. Essa correção é feita compilando e executando o código fonte enviado pelo time ao juiz. O Juiz que será utilizado é chamado de BOCA.
Após enviar (submeter) o código de um problema ao juiz, o time receberá alguma das seguintes respostas (vereditos):
YES: Seu código compilou e rodou corretamente. Além disso gerou corretamente todos os resultados esperados para todos os casos de teste.
NO: Wrong answer: Indica que seu código compilou e rodou sem problemas. Porém, ele não gerou os resultados esperados para todos os casos de teste.
NO: Time-limit Exceeded: O código compilou corretamente, contudo durante a execução limite de tempo para a execução foi estourado.
NO: Runtime Error: O código compilou corretamente, contudo durante a execução foi encontrado um erro de execução. Exemplos comuns que levam a esse veredito: acesso ilegal de memória (segment fault) e excesso de uso de memória.
NO: Compilation Error: O código não compilou corretamente no servidor do BOCA. Lembre-se sempre de verificar se o seu código está compilando corretamente na sua máquina local.
NO: presentation Error: Esse veredito significa que o código compilou, rodou e gerou as respostas esperadas para todos os casos de teste. Contudo, ele só não recebeu o veredito de YES, pois apresenta algum detalhe incorreto na apresentação da resposta. Exemplos comuns que levam a esse veredito: Troca de entre letras maiúsculas e minúsculas, acentos, pontuações, espaços.
Os times são classificados de acordo com a quantidade de problemas resolvidos, logo se um time tem mais problemas resolvidos que outro ele estará melhor classificado. No caso de dois times terem a mesma quantidade de problemas resolvidos o desempate será dado a favor do time com o menor tempo total. O tempo total é a soma do tempos consumidos na resolução de cada um dos problemas. O tempo consumido por problema é o tempo que se passou desde o inicio da prova até o momento de primeira submissão correta do time para aquele problema. Também é acrescido uma penalidade de 20 minutos para cada tentativa incorreta de submissão do problema anterior a primeira submissão correta. Problemas que não receberam veredito de correto (YES) não são considerados no cálculo do tempo total.
Serão aceitas as seguintes linguagens:
C
C++
Python 2
Python 3
Java
É importante ressaltar que o time pode usar livremente as linguagens, podendo alternar entre elas durante a prova. O time apenas é responsável por informar ao BOCA qual a linguagem desejada do código fonte que está sendo submetido.
Sobre bibliotecas: Procure utilizar bibliotecas padrões das linguagens. Bibliotecas como por exemplo pandas do python não são aceitas.
É possível enviar um arquivo para a impressão. Essa dica é muito útil para que alguém do seu time possa procurar possíveis bugs num código enquanto outra resolve o próximo problema.
O time pode utilizar a aba Clarifications para enviar aos monitores dúvidas a respeitos das questões, como por exemplo esclarecimento da descrição dos problemas ou qualquer outro aspecto da prova. Depois de enviada os monitores irão analisar a pergunta do time e respondê-la da forma que julgarem adequada.
Fica de responsabilidade do time checar de tempos em tempos a aba de Clarifications para consultar se sua pergunta já foi respondida.
Como todos os problemas tem o mesmo valor não faz sentido deixar de fazer um problema fácil para fazer um difícil. Por isso, certifique-se que seu time leu a prova inteira e está primeiro concentrado em resolver os problemas mais fáceis primeiro. Uma boa dica é verificar de tempos em tempos o placar geral para ver quais problemas as outras equipes estão resolvendo em maior quantidade.
Lembre-se que cada time terá apenas um computador, por isso tente otimizar o tempo gasto nele. Uma boa dica é se você tiver a solução de um problema engatilhada e outro companheiro de equipe estiver utilizando o computador, você pode começar a escrever o seu código num papel. Quando chegar sua vez de utilizar o computador o código já estará estruturado e será mais rápido de escreve-lo.
Alguns problemas parecem bem fáceis a primeira vista, mas um código ingênuo para resolve-los pode utilizar muitas operações e não terminar antes do limite máximo de tempo. Por isso, é interessante estimar a quantidade de operações que sua solução está fazendo para resolver um problema.
Normalmente estimamos que um computador faz na ordem de 10^8 operações por segundo, por isso, seu código não pode ultrapassar muito esse valor, pois é esperado que a solução dos problemas leve no máximo alguns segundos.