Sumário Maratona de Programação - Dicas Para Iniciantes Prof. Josué Pereira de Castro Universidade Estadual do Oeste do Paraná Curso de Bacharelado em Informática Cascavel, 2009
Sumário Sumário 1 Conceitos Fundamentais
Conceitos Fundamentais Maratona de Programação (ACM ICPC - International Collegiate Programming Contest): Um playground para explorar a inteligência dos programadores Iniciantes: tente encontrar primeiro os problemas mais fáceis e resolvê-los no tempo mais curto possível. Tente gastar menos tempo com a codificação e mais tempo pensando no algoritmo de solução e na depuração. Bons programadores gastam 10% do tempo com a codificação, 45% do tempo pensando na solução e 45% do tempo com a depuração do programa.
Linguagens de Programação e Depuração Inicialmente, tente aprender apenas uma linguagem de programação profundamente. Somente após dominar uma linguagem razoavelmente bem, tente explorar as outras linguagens permitidas. Esta abordagem reduz o tempo necessário para a escrita dos problemas e para a depuração dos códigos. Com o tempo, tente escolher a linguagem mais adequada para resolver cada problema específico.
Evite Erros de Compilação Muitos iniciantes gastam bastante tempo enviando submissões que não compilam na máquina do juiz. As principais causas, geralmente são: 1 usar funções que não estão definidas no padrão da linguagem 2 tentativa de manipular os arquivos de entrada e saída diretamente dentro do programa. A saída deve ser lida/escrita diretamente para o console através das funções/objetos padrão da linguagem. 3 uso de bibliotecas que não estão no padrão das linguagens permitidas (Ex: conio.h) 4 utilização de pacotes (packages) na linguagem java, que geralmente provocam erros quando compilados na máquina dos juizes 5 certifique-se de que está enviando a solução certa para o problema correto, pois os sistemas de submissão consideram estas submissões como erros, e os juizes também.
Esqueça a eficiência (a menos que seja necessário) Muitos problemas em torneios são especificamente projetados para medir a capacidade do concorrente em construir códigos eficientes e rápidos, mas muitos pedem apenas qualquer solução. Inicialmente, concentre-se em encontrar uma solução para o problema (qualquer solução) e submeta. Se a solução estourar o tempo determinado, tente otimizar o código para reduzir o tempo de execução.
Tenha na cabeça (ou em mãos) vários tipos de algorimos Muitos problemas só podem ser resolvidos pela aplicação de vários algoritmos clássicos combinados, ou através de variações efetuadas nestes algoritmos clássicos. É importante tê-los disponíveis. Prefira inicialmente os algoritmos mais simples para resolver os problemas, ainda que estes não sejam os mais eficientes. O torneio não leva em conta elegância nem eficiência (a não ser em alguns problemas específicos).
Faça uma programação simples Evite o uso dos operadores ++ e dentro de expressões ou de chamadas de funções. Evite expressões da forma *p++. Evite o uso da aritmética de ponteiros Use p[5] em vez de (p+5). Evite abusar do operador ternário. Utilize sempre nomes descritivos para suas variáveis.
Finalmente Conceitos Fundamentais Não se pode ensinar a resolver problemas. Só se aprende a resolvê-los tentando. Aprender uma linguagem de programação requer prática constante. Para ser um bom programador é preciso gostar de programar. Uma boa bagagem matemática é fundamental. Persistência e determinação são imprescindíveis.