O que é?

A Maratona de Programação é um evento da Sociedade Brasileira de Computação que existe desde o ano de 1996. A Maratona nasceu das competições regionais classificatórias para as finais mundiais do concurso de programação, o International Collegiate Programming Contest, e é parte da regional sulamericana do concurso. Neste ano ocorre a 24a. edição da Maratona.

Ela se destina a alunos e alunas de cursos de graduação e início de pós-graduação na área de Computação e afins (Ciência da Computação, Engenharia de Computação, Sistemas de Informação, Matemática, etc). A competição promove nos estudantes a criatividade, a capacidade de trabalho em equipe, a busca de novas soluções de software e a habilidade de resolver problemas sob pressão. De ano para ano temos observado que as instituições e principalmente as grandes empresas da área têm valorizado os alunos que participam da Maratona.

Várias universidades do Brasil desenvolvem concursos locais para escolher os melhores times para participar da Maratona de Programação. Estes times competem na Maratona (e portanto na regional sulamericana) de onde os melhores serão selecionados para participar das Finais Mundiais do evento. No ano de 2018, mais de 50 mil estudantes de mais de 3000 escolas de mais de 100 países competiram em regionais em todo o planeta, e apenas 135 (cerca de 1%) participam das Finais Mundiais do evento, no Porto, Portugal. Seis times brasileiros, dos quase de 800 participantes, estarão presentes nas finais mundiais.

Os times são compostos por três estudantes, que tentarão resolver durante 5 horas o maior número possível dos 10 ou mais problemas que são entregues no início da competição. Estes estudantes têm à sua disposição apenas um computador e material impresso (livros, listagens, manuais) para vencer a batalha contra o relógio e os problemas propostos.

Os competidores do time devem colaborar para descobrir os problemas mais fáceis, projetar os testes, e construir as soluções que sejam aprovadas pelos juízes da competição. Alguns problemas requerem apenas compreensão, outros conhecimento de técnicas mais sofisticadas, e alguns podem ser realmente muito difíceis de serem resolvidos.

O julgamento é estrito. No início da competição os competidores recebem os problemas que devem ser resolvidos. Nos enunciados dos problemas constam exemplos dos dados dos problemas, mas eles não têm acesso às instâncias testadas pelos juízes. A cada submissão incorreta de um problema (ou seja, que deu resposta incorreta a uma das instâncias dos juízes) é atribuída uma penalidade de tempo. O time que conseguir resolver o maior número de problemas (no menor tempo acumulado com as penalidades, caso haja empate) é declarado o vencedor.

Regras

Estas regras foram aprovadas pelo Comitê Diretor da Maratona de Programação para vigorarem a partir do ano de 2015. As mesmas regras se mantêm em 2019.

Formação dos times

Os times representam instituições de ensino superior, aqui chamadas de escolas. Uma escola é definida pela instituição de ensino superior e a cidade de onde vêm os alunos participantes do time. Assim, por exemplo, a USP poderá ter times de várias escolas: USP-São Paulo, USP-São Carlos, etc. A Unicamp poderá ter times de: Unicamp-Campinas, Unicamp-Limeira, etc. No caso de um curso a distância, a escola poderá ser definida pela instituição de ensino superior e o polo de onde provêm os estudantes ou, no caso do time combinar alunos de vários polos, a instituição de ensino superior e o adjetivo "virtual" para caracterizar que são alunos de EAD.

Os times são formados por um coach e três alunos regularmente matriculados desta instituição. Uma mesma instituição pode ter vários times participantes da primeira fase do concurso. Todos os times de uma institutição devem disputar a primeira fase em uma mesma sede. A aceitação de mais de dois times de uma escola está sujeita à capacidade da sede em que a inscrição se realiza e será atendida por ordem de chegada.

O concurso se destina a alunos de instituições superiores tipicamente da área de computação (Ciência da Computação, Engenharia de Computação, Sistemas de Informação, etc) e áreas afins (Matemática, Física e Engenharia). Não há impedimentos à participação de alunos de outros cursos. O coach será o representante do time junto à organização do concurso e deverá ser um docente desta escola ou poderá ser indicado (através deste formulário) para a função por um representante desta escola. O mesmo coach poderá representar vários times da escola. Uma mesma escola pode ter vários coaches. Os times da escola deverão ser inscritos na sede da primeira fase definida para sua região geográfica pelo Comitê Diretor do concurso. O coach poderá solicitar uma mudança de sede ao comitê diretor. Todos os times da escola devem competir na mesma sede.

Cada time é composto por três alunos e, no máximo, um reserva. Todos devem ser alunos regulares de cursos de graduação ou pós-graduação da escola. A participação do reserva no concurso se dará apenas em caso de algum problema ocorrer com um dos participantes antes da realização do concurso, e a substituição deverá ser comunicada ao Comitê Diretor da Maratona de Programação até, no máximo, a véspera da competição. Depois de iniciado o concurso não há possibilidade de substituições no time. Um time com dois ou menos componentes não poderá se qualificar às fases posteriores da Maratona de Programação. Assim, se algo ocorrer com um dos três componentes de um time sem reserva, este time fica desqualificado.

Um time é elegível se todos os seus membros (competidores e reserva) satisfizerem a condição abaixo:

Assim, por exemplo, se você iniciou seu primeiro curso superior em 2018, pode participar, mesmo que tenha nascido em 1994. Outro exemplo, se você nasceu em 1996 pode participar, mesmo tendo iniciado sua graduação em 2013.

Apresentamos abaixo novamente as regras, agora em forma de um "programa" para verificar se o competidor é ou não elegível:

ATENÇÃO: Conforme descrito nas as regras das regionais do ICPC há a possibilidade de, em casos excepcionais (afastamentos por motivo de saúde, serviço militar, etc) ser concedido uma extensão no período de elegibilidade de um competidor. Para isso o coach deverá encaminhar um pedido ao comitê de elegibilidade do ICPC. No parágrafo abaixo (extraído das regras do ICPC) está descrito como o coach deve proceder:

A coach may petition the ICPC Eligibility Committee at least three weeks before the regional contest, to extend the Period of Eligibility for a student whose full-time studies have been interrupted or extended. (This includes military or civilian service, illness, any work, other studies, or personal reasons). The coach must demonstrate that such an extension would not provide an unfair advantage to the team. A petition will normally be approved if the student meets the Basic Eligibility Requirements and has not completed more than the equivalent of eight semesters of full-time STEM study as of the date of the regional contest. The ICPC Eligibility Committee will render a decision within five days of receiving the petition.

Caso seu pedido seja atendido, envie uma cópia da mensagem do Comitê de Elegibilidade do ICPC ao Comitê Diretor da Maratona.

Em caso de dúvida, entre em contato com o Comitê Diretor da Maratona.

Inscrição de times e classificação para a final brasileira

As porcentagens acima indicam o número aproximado de vagas de cada tipo. As vagas não usadas por uma das regras serão distribuídas automaticamente entre as demais, a critério do comitê diretor da Maratona de Programação.

Uma mesma escola pode classificar dois times para a final brasileira apenas no caso de ambos os times classificarem-se pela regra 1.

Formação das supersedes

As sedes que não atingirem o limiar (10 times e 5 escolas) para fins de distribuição das vagas pela regra 2 são agrupadas: Estas supersedes receberão vagas na final brasileira utilizando a fórmula descrita na regra 2 acima.

Correção centralizada

Neste ano vamos utilizar novamente a correção centralizada. Todas as sedes deverão participar, mas deverão manter um esquema alternativo de correção das submissões para o caso de algum problema ocorrer.

Formato do concurso

Em cada uma das fases da Maratona de Programação os times receberão uma prova com diversos problemas que devem ser resolvidos durante 5 horas de competição. A prova da final brasileira será escrita em inglês. A prova da primeira fase poderá ser em português. Os problemas deverão ser resolvidos em alguma das linguagens de programação disponíveis. Na final brasileira os programas deverão ser feitos em C, C++, python, Java ou kotlin. Na primeira fase, o diretor da sede poderá solicitar a inclusão de outras linguagens de programação, que será julgado pela organização. Os times poderão resolver um problema da prova em uma linguagem de programação e um outro problema em outra linguagem, sem qualquer prejuízo. Para a implementação os times terão à sua disposição um computador e todo o material escrito que desejarem. Entretanto, não poderão fazer uso de material armazenado em meio digital ou ter acesso à Internet durante a competição.

Quando um time julgar que tem um programa que resolve um problema, ele pode submetê-lo à correção dos juízes, que compilam e executam este programa para uma bateria de testes desconhecida dos times. Um problema é considerado resolvido se, para todos os testes da bateria, ele devolve o resultado esperado pelos juízes. Para cada submissão o time recebe uma resposta, que pode ser satisfatória (e o problema está resolvido pelo time) ou indica algum erro ocorrido, como: resposta errada, tempo de execução excedido, erro de execução, erro de compilação, etc.

O time vencedor é aquele que resolve a maior quantidade de problemas nas 5 horas de competição. Empates no número de problemas resolvidos são classificados pelo tempo corrigido. Ganha aquele que tem o menor tempo corrigido. O tempo corrigido do time é dado pela soma dos tempos corrigidos somente dos problemas corretamente resolvidos pelo time. O tempo corrigido de um problema é dado pelo número de minutos decorridos desde o início da competição até o momento da primeira submissão correta somado com uma penalidade de 20 minutos por submissão incorreta feita anteriormente neste problema. Em caso de empate, será considerado vencedor o time cuja última submissão correta tenha sido feita mais cedo. Persistindo o empate, passará à penúltima submissão correta e assim por diante. Se persistir o empate a organização fará um sorteio entre os times envolvidos.

A organização da competição é responsável pela decisão de qualquer caso não previsto. Os times inscritos permitem o uso e divulgação de suas imagens e dos programas submetidos pela organização da competição.

Premiação e qualificação para as finais mundiais

A Maratona de Programação da SBC oferece medalhas aos dez primeiros colocados na fase final da competição: ouro para os três primeiros; prata para o quarto, quinto e sexto; e bronze para o sétimo a décimo lugares. Além disso, o time campeão recebe uma cópia do troféu "Maratona de Programação".

O time campeão da Maratona de Programação garante vaga nas finais mundiais do concurso de programação do ICPC. Caso o Brasil receba outras vagas nas finais da competição, estas serão ocupadas pelos primeiros colocados da final brasileira, respeitado o limite de uma vaga por escola, conforme regra do ICPC.

Os times classificados para a final mundial do ICPC serão convidados a participar de um ou mais treinamentos, oportunamente anunciados.

Recursos

Apenas o coach do time poderá recorrer à organização do evento caso julgue que seu time tenha sido prejudicado durante a competição. Qualquer recurso deve ser inicialmente enviado ao diretor da Maratona de Programação dentro de dois dias úteis a contar do dia da realização do concurso. O Comitê Diretor da Maratona de Programação decidirá sobre o caso nos três dias úteis seguintes. O Comitê Diretor da Maratona de Programação encaminhará o recurso e a decisão local ao diretor da super-região Latino-Americana do ICPC. Os resultados da Maratona de Programação serão finais apenas quando todos os recursos tiverem sido julgados.

Um recurso deve estar baseado em uma ou mais das circunstâncias a seguir: violação de uma regra, má conduta de um time ou má conduta da administração do concurso com intenção de prejudicar. As decisões dos juízes são finais. Não cabe recurso quanto a julgamento de problemas.

Qualquer dúvida a respeito das regras deve ser encaminhada ao Comitê Diretor da Maratona de Programação.

Ambiente Computacional

Na primeira fase e na Final Brasileira da Maratona de Programação usaremos o ambiente Latam BOCA Linux, e o sistema de submissão eletrônica BOCA. Mais informações disponíveis nos sites abaixo:

Latam BOCA Linux e BOCA

Informações sobre a instalação para a primeira fase (os diretores de sede receberão mais detalhes sobre a instalação e configuração do sistema em momento oportuno)

O ambiente computacional da Primeira Fase da Maratona de Programação será o mesmo independentemente da sede em que seu time competirá. A programação da primeira fase pode variar um pouco de sede para sede, mas recomendamos que a sessão de aquecimento ocorra por volta das 10:00. A prova iniciará pontualmente às 14:00 (horário de Brasília) em todas as sedes. Fique atento à programação de sua sede!

Ambiente computacional:

O responsável pelos sistemas usados na Maratona de Programação é o Prof. Bruno César Ribas (UnB-Gama) .

Comitê organizador

A XXIV Maratona de Programação só acontece graças ao trabalho voluntário de muitos entusiastas da ideia. A criação da competição foi uma iniciativa dos professores Claudionor Coelho, Carlos Camarão do Depto de Ciência da Computação da UFMG e Ricardo Dahab, do IC da Unicamp.

Nos primeiros anos estiveram envolvidos na organização Marcus Poggi (PUC-Rio), Ricardo Anido (IC-Unicamp), Raul Weber (UFRGS), Ricardo Dahab (IC-Unicamp), Katia Guimarães (UFPE), entre outros. O sistema Boca é de autoria de Cassio Polpo de Campos (Utrecht) que foi o responsável pelos sistemas de 2002 a 2018.

Desde o ano 2000 o evento passou a ser promovido pela Sociedade Brasileira de Computação, e o responsável pelo concurso no Brasil é Carlos E. Ferreira do Depto de Ciência da Computação do IME-USP.

O Comitê Diretor da Maratona de Programação é formado pelo diretor Prof. Carlos E. Ferreira (USP) e seu suplente Prof. Rodolfo Azevedo (Unicamp) e um representante e suplente de cada região brasileira:

O diretor da super região latino-americana do ICPC a partir de 2018 é Federico Meza (Universidad de Talca, Chile) que substituiu Ricardo Dahab (Unicamp) que esteve a frente da organização de 1996 a 2017.

O diretor de problemas e chefe dos juízes é Paulo Cezar Pereira Costa (UFG). No Brasil, o diretor de problemas é Vinicius Santos (UFMG). O diretor de Sistemas é o Prof. Bruno Ribas (UnB - Gama). O diretor da Final Brasileira da XXIV Maratona de Programação são os Profs. Jemerson Damásio e Hamurabi Medeiros (Unifacisa).