Programação Fase 1 Nível 1 Turno B

Aula de Matemática

Solução escrita por Márcio Vitor

Conhecimentos necessários:

Dados inteiros $$A,B$$ o problema pede o máximo entre $$A + B$$ e $$A – B$$, podemos fazer isso lendo os dois inteiros e usando a função $$max$$ da biblioteca padrão (Note que também é possível usar um $$if$$ para verificar qual o maior entre os dois).

Clique aqui para ver o código completo.

Fichas

Solução escrita por Enzo Hirota

Conhecimentos necessários:

Usaremos o seguinte algoritmo para resolver o problema:

  • Pegaremos a maior quantidade de fichas de $$R$ 10 $$
  • Pegaremos a maior quantidade de fichas de $$R$ 5 $$ do que sobrou
  • Pegaremos a maior quantidade de fichas de $$R$ 2 $$, do que sobrou
  • Pegaremos a maior quantidade de fichas de $$R$ 1 $$, do que sobrou

Executando esses passos nesta ordem, o problema será resolvido, agora resta provar que isso funciona:

Prova: Note que os números de $$1$$ até $$4$$ podem ser escritos, como as seguintes somas de fichas:

$$1=1$$$$2=2$$$$3=2+1$$$$4=2+2$$

Terminaremos agora com um argumento da troca, suponha que na nossa solução possuímos as seguintes quantidades de fichas para cada valor: $$q_1, q_2, q_5, q_{10}$$.

Agora suponha que solução possui menos de $$q_{10}$$ fichas de $$R$10$$, então conseguimos somar um número entre $$10$$ e $$14$$, usando apenas as fichas de valor $$1, 2$$ e $$5$$, já que enquanto a soma não superar $$10$$, podemos adicionar uma ficha, e quando for maior ou igual a $$10$$, não será maior que $$14$$, já que pode-se adicionar no máximo $$5$$ por vez, assim:

  • Se a soma for exatamente $$10$$, troca por uma ficha de $$R$10$$, assim diminuindo o número de fichas
  • Se a soma for entre $$11$$ e $$14$$, note que usaremos no mínimo $$3$$ fichas, então se trocarmos por uma ficha de $$R$10$$, e o que sobrar por como está escrito na tabela, trocaremos por no máximo $$3$$ fichas, assim não piorando a resposta.

Usando argumento análogo para as fichas de $$R$5$$ e $$R$2$$, provamos que nossa resposta é pelo menos tão boa, quanto a suposta resposta ótima. Desse modo provamos que realmente utilizamos a menor quantidade de fichas.

Clique aqui para ver o código completo

Solução extra: O problema, se resume essencialmente a um knapsack, o resto é deixado ao leitor, pode se ler mais sobre em Problema da Mochila, tendo um código para solução

Transporte

Solução escrita por Julia Tiosso

Conhecimentos necessários:

O algoritmo que vamos realizar consiste em tentar agrupar o máximo de estudantes possível em um mesmo transporte. Assim, garantimos que usamos a quantidade mínima de ônibus.

Dessa maneira, vamos atribuir inicialmente o primeiro ônibus ao estudante de tempo $$t_1$$. Suponha que estamos atualmente preenchendo um ônibus que começa no estudante $$j$$ e queremos decidir se o estudante $$i$$ pode entrar nesse mesmo ônibus:

  • Se $$t_i$$ $$-$$ $$t_j > K$$, então o estudante $$i$$ não pode embarcar nesse transporte, pois isso implicaria que $$j$$ esperaria mais de $$T$$ segundos. Então um novo ônibus que começa no estudante $$i$$ deve ser contratado.
  • Senão, $$i$$ consegue entrar nesse transporte e seguimos tentando agrupar os próximos estudantes.

Clique aqui para ver o código completo.