Competitive Programmer Calouro's Guide - First Accepted

calouros Jan 29, 2020

Eai calouro.

Este guia tem o objetivo de te adiantar algumas coisas sobre programação competitiva, e que, sabendo nada ou sabendo muito sobre programação, você saia daqui com seu primeiro accepted.

Programming:

Carinhosamente abreviado para codar

Se você já sabe os comandos básicos(input, operações matemáticas e output) de alguma linguagem de programação (menos visualg) pode clicar aqui para pular esta parte.

Esta seção vai te mostrar os comandos básicos para você fazer o seu primeiro código. Sem dúvida o mais rápido e fácil nesse momento é aprender Python.
Para iniciarmos, instale o python3 no seu computador e adicionar ele às suas variáveis de ambiente Se tiver dificuldades, use um compilador online. Para já familizar vocês, vou colocar também alguns exemplos em C

Com o ambiente setado, hora de codar! Abra seu editor de texto, crie um arquivo a.py.
Neste primeiro passo vamos aprender a dar um output, o famoso print. É complicado, vá com calma:

Para printar palavras:

print("Ola Mundo")

Printar números inteiros:

print(10)

Printar números reais:

print(10.566666)

Printar variáveis:

a = 5

print(a)

Printar variáveis formatando a saída(o mais importante até aqui):

a = 5

print('Ola mundo {}'.format(a))

Para rodar seu código é só ir até o terminal ou prompt de comando (ctrl + t no Ubuntu), navegar até a pasta em que você criou o arquivo e executar python3 nome_do_arquivo.py.

Beleza, já sabemos sair com dados, agora vamos aos comandos de entrada:

a = input()

a será do tipo string/texto, para fazer a conversão quando você quer um número inteiro:

a = int(a)

ou diretamente na entrada:

a = int(input())

Continhas matemáticas:

a = 2

b = a + a

Neste caso, o + pode ser substituído por qualquer uma das outras operações (-, *, /, %)

O operador % significa resto da divisão inteira. 5 % 3 = 2, pois 5/3 = 1 e sobra 2

Agora juntando tudo:

a = int(input())
b = a + a
print("a = {}".format(b))

em C:

#include <stdio.h>

int main(){
    int a; scanf("%i", &a);
    int b = a+a;
    printf("a = %i\n", b);
}

Esse é o básico que eu queria que você soubesse para passar para a próxima seção. Vamos então aplicar os conhecimentos de programação na programação competitiva.

Competitive Programming:

Para falar de programação competitiva, primeiramente:

JA FEZ UMA CONTA NO URI????!11

URI é o online judge que a gente mais usa na UDESC, pelo menos nesse começo... E entrar na competição do ranking da UDESC vai ser um bom incentivo.

- Mas o que são online judges?

São corretores de código automáticos sem coração, olhos ou ouvidos. O que quero dizer é que eles não vão olhar seu código diretamente, não vão ver suas variáveis ou seus comentários xingando o judge.

The only thing that matters is the output. (unknown,2020)

Ou seja, a correção será feita comparando o que você printou com a resposta esperada, por isso a resposta deve ser exatamente como é pedida nos probleminhas.

- Probleminhas:

Os problemas sempre são compostos por um enunciado, uma explicação sobre a entrada que vai ser dada, sobre como a saída é esperada, e um input sample.
O input sample é um caso exemplo do problema, isso te ajuda a testar antes de dar o submit.

- Hora do primeiro submit

Submit do inglês submeter, mandar. É quando você, no caso do URI, cola seu texto, manda para a correção, e torce pelo tão esperado accepted. O URI tem o problema 1001 solucionado em várias linguagens no site, mas espero que você faça seu próprio código para entender melhor.

Abra o problema 1001 - Extremamente Básico veja o que é pedido e tente fazer seu código com o que você sabe.

E hora do submit!, teste seu código e pode mandar. No menu, clique em submissões para ver a resposta recebida.

- As respostas do Judge:

Accepted : Se você conseguiu essa resposta parabéns, você solucionou o problema - mas mesmo assim leia o que significam as outras respostas. Se não foi aceito faz parte, tanto que esse problema vale bastante pontos, leia o significado das outras respostas para saber o que errou.

Presentation error : Um dos erros mais comuns no problema 1001, é quando você acerta as entradas mas não do jeito que foi pedido no problema. Quando, por exemplo, esquecemos de quebrar linha (\n) no final de todos os prints.

Em Python, todo print já quebra linha, então nem se preocupa. Em C você deve sempre colocar um printf("\n") no final de tudo.

Wrong anwser(%x) : Sim, resposta errada, você não fez o código esperado, tente consertar e realizar testes que quebram sua solução. A porcentagem entre parenteses é quantas das resposta você errou.

Time limit exceeded : É uma das coisas que torna os problemas difíceis mais difíceis, o seu código tem um tempo limite para executar e dar a resposta, geralmente 1s, e se passar disso terá o tempo limite excedido. É por causa desse erro que você vai ouvir muito falar em complexidade de algoritmo.

Runtime error : Alguma coisa quebrou seu código durante a execução, uma divisão por zero, uma posição de vetor errada... Alguma coisa assim.

Compilation error : Erro para compilar seu código, provavelmente algo errado na sintaxe da linguagem. Se você fez um código em Python e mandou em C é essa a resposta que vai ter ou se você usou algum recurso de uma biblioteca que não importou.

Pronto.

Agora que você já sabe o básico é só ir em frente, vendo os próximos problemas, saber mais sobre a linguagem, pesquisar como fazer alguma coisa é o que mais ajuda a aprender coisas específicas. Nos próximos problemas algumas coisas com números reais como formatação do print para esses números vai ser necessário, pesquise, aprenda, e assim vai indo.
E SEMPRE QUE PRECISAR VENHA ATÉ NÓS, BRUTE, TIRAR SUAS DÚVIDAS

Igor

Técnico no Senai | Reprovou com o Corso | Café com Leite na Nacional 2019