quarta-feira, 7 de outubro de 2015

New Fresh Beginning - From Blogger to WordPress

Hey everyone,

The blog now has a new home :D! imariannelinhares.wordpress.com (EN-US) and mariannelinharesbr.wordpress.com (PT-BR), yes I'm poor and I dont have the money to pay premium wordpress. If the blog starts receiving more visitors who knows? Maybe I'll update it soon!

Wordpress is easier to use, mantain and update it to a real domain if the blog works out, and that's why I'll be using Wordpress now. So sorry Blogger, I can't stay with you anymore, we had a nice time and all, but we can't fool ourselves anymore.

See you guys on next post, and hope you guys enjoy this new blog's looks. 

sábado, 19 de setembro de 2015

Banda da Semana #3 - SOHN


Mais um cantor da série coisas que descobri no Spotify(sim faço propaganda gratuita mesmo, porque amo de paixão, um xero spotify). SOHN, Christopher Taylor, é um músico inglês que lançou o primeiro albúm em 2014. Não faço ideia de que gênero é esse, é uma música eletrônica com um toque R & B, soul, não sei, é diferente de tudo que já escutei e por isso valorizei muito e viciei bastante. O cara é bastante talentoso vale a pena escutar!


SOHN - Artifice




Tremors ao vivo!

Grafos, o que são?

Introdução


Olá, nesse post iremos discutir um pouco sobre grafos. Esse é um dos assuntos principais para a transição de iniciante (em olimpíadas de programação) para intermediário (ao meu ver, claro).

Quado eu não sabia ao certo o que era um grafo, ou de outra forma não sabia codificar alguns algoritmos clássicos de grafos, quando alguém falava de grafos/me perguntava sobre o assunto o que eu pensava era:

"Grafos é um assunto muito difícil(principalmente de codificar),  que aparece de vez em quando numas questões que eu até sei que envolvem grafos, mas não sei nem pra onde vai na hora de codificar"

Bem, o objetivo desse post é transformar esse pensamento em algo mais estruturado como:

"Grafos não é algo difícil, apenas por ser algo novo e um pouco mais avançado requer alguns conhecimentos prévios e pode levar algum tempo pra se acostumar com a ideia, mas nada de outro mundo. Várias questões abordam grafos, é difícil haver uma competição sem nenhuma questão de grafos. E no momento que você entende os algoritmos, a maioria é tranquilo de entender e de codificar".
Ps: achei que a frase ficaria mais curta, mas isso representa bem a visão que alguém(generalizando, claro) que nunca codificou nada de grafos terá.

Esse post será organizado nos seguintes tópicos:
  • Assuntos prévios que devem ser estudados
  • Grafos, o que são?
  • Grafos, como representar?
  • Bibliografia/Sugestão de leituras

Assuntos prévios que devem ser estudados


Então vamos lá, antes de saber o que é um grafo, alguns assuntos que devem ser dominados, ou pelo menos você já deve ter codificado/utilizado, são:
  1. Recursão
  2. Estruturas de dados básicas (pilha, fila, fila de prioridade)
  3. Se sentir seguro na linguagem que utiliza (bibliotecas, sintaxe)
    Ps: planejo fazer posts sobre cada tópico e colocarei o link :).
Se você nunca ouviu falar em algum dos assuntos, ou não se sente seguro, aconselho dar uma estudada nisso antes, já que ao meu ver algumas das dificuldades em entender grafos surgem devido a pouca experiência nos assuntos base acima.

Grafos, o que são?

Para maratonas e provas uma definição "suficiente" de grafos é: Uma forma de organizar dados, definida a partir de um conjunto de vértices/nós e um conjunto de arestas são utilizadas para ligar 2 vértices.

Grafo 1
Grafo 2
Grafo 3


Certo... mas para que serve essa representação? Há várias situações onde um grafo é um ótimo modelo estrutural para representar a situação, os exemplos mais clichês, porém também bastante comuns em questões é: estradas e rodovias, redes sociais, rede de amizades, relações de dependências.

Um exemplo de enunciado de uma questão envolvendo grafos é a questão pedágio da OBI 2002:


Como prêmio pela primeira colocação na Olimpíada Brasileira de Informática, Juquinha e sua família ganharam uma viagem de uma semana à Coréia do Sul. Como o país é deslumbrante, com tradições, cultura, arquitetura e culinária muito diferentes das do Brasil, o pai de Juquinha, o Sr. Juca, decidiu alugar um carro para conhecer melhor o país. As estradas(1) são muito bem cuidadas; todas são de sentido duplo(2), e duas cidades podem ser ligadas diretamente por mais de uma estrada(3). No entanto, em todas as estradas paga-se um pedágio de valor fixo(4) (há um pedágio em cada direção, entre duas cidades). Como o Sr. Juca não tem muito dinheiro para gastar, as viagens com o carro devem ser muito bem planejadas.

Tarefa: Escreva um programa que, conhecidas as cidades
(5) e estradas existentes no país, e a cidade onde Juquinha e sua família estão, encontre cada cidade (que não a cidade onde eles estão) que possa ser visitada por eles, dada a restrição de que o Sr. Juca deseja pagar no máximo P pedágios (considerando apenas a viagem de ida)(6).

Onde está o grafo nessa questão? Bem, esse é um exemplo clássico, as estradas são as arestas e as cidades são os vértices.

Exemplo de estradas representadas por um grafo

Mas no texto há algumas palavras interessantes que definem o tipo do grafo, sim existem tipos de grafos! E isso muitas vezes interfere na nossa solução e representação.

Seguem abaixo...

Expressões importantes

Caminho: sequência de vértices tal que de cada vértice existe uma aresta para o seguinte.
Caminho mínimo: menor caminho que liga um vértice à outro(essa definição muda se o grafo por ponderado)
Grau: o grau de um vértice é o número de arestas que saem deste vértice em direção a qualquer outro vértice.
Laços: aresta que liga um vértice a ele mesmo.
Ponto de articulação: vértice cuja remoção desliga um grafo.Vizinhos: vértices ligados.
Ponte: aresta cuja remoção desliga um grafo.Ciclos: caminho que começa e acaba no mesmo vértice.
Componentes: parte conectada de um grafo. (se um grafo é conectado ele só tem 1 componente)

As principais características que definem o grafo

Grafo conectado: existe um caminho de um vértice para qualquer outro.
Grafo desconectado: existe algum vértice que não conseguimos chegar de algum outro vértice.

Grafo esparso: se o número de arestas for muito menor que o número de vértices ao quadrado.
Grafo denso: se o número de arestas for aproximadamente o número de vértices ao quadrado.

Grafo direcionado: as arestas tem direções. Ou seja, a existência de uma aresta de A para B (A e B são vértices) não implica na existência de uma aresta de B para A.
Grafo não direcionado: as arestas não tem direções. Ou seja, a existência entre A e B (A e B são vértices) implica na existência de uma aresta entre B e A.

Grafo ponderado: as arestas tem pesos.
Grafo não ponderado: as arestas não tem pesos, de outra forma: todas as arestas tem o mesmo peso.

Tipos de grafo

Árvore: grafo sem ciclos e conectado.
Floresta: grafo sem ciclos.
Grafo simples: grafo não direcionado, sem laços e há no máximo uma aresta entre 2 vértices.
Grafo regular: todos os vértices tem o mesmo grau.
Grafo bipartido:
Grafo completo: grafo simples onde para cada vértice existe uma aresta conectando este vértice a cada um dos demais. Esse grafo tem n(n-1)/2 arestas, n é o número de vértices.

Há váááários temos específicos como já deu pra perceber. Vão aparecendo mais e mais com o tempo haha, mas ao utilizar e fazer questões você não precisa decorar, vai aprendendo com o tempo, então calma!

Certo, voltando ao texto do exemplo, um desafio: o que cada expressão indexada no texto representa para o grafo que iremos formar?

(1) - arestas
(2) - grafo não direcionado
(3) - não é simples
(4) - não ponderado
(5) - vértices
(6) - E o que ele quer como resposta? O número de vértices cujo caminho mínimo entre 2 pontos é menor ou igual a P.



Grafos, como representar?


Há 2 maneiras principais de representar grafos: matriz de adjacência e lista de adjacência. 
Cada uma tem seus benefícios e situações em que são mais vantajosas, ao final da explicação faremos uma tabela que expõe essa informação de maneira objetiva. Mas antes vamos falar desses modos de representação e como funcionam.
Bem, sabemos que temos que representar vértices e arestas. Mas como fazer isso?

Matriz de adjacência

A matriz de adjacência consiste em uma matriz
N x N onde N é o número de vértices do grafo e as linhas representam de onde a aresta sai e as colunas para onde as arestas vão. Geralmente o valor 1 em uma certa linha:coluna representa que existe uma aresta da linha para a coluna, e o valor 0 a ausência dessa aresta. Se o grafo for ponderado é utilizado um valor muito grande(infinito) para representar a ausência e o peso da aresta representa a existência da ligação.


Grafo VS Matriz de adjacência - 1


Grafo VS Matriz de adjacência - 2
Lista de adjacência

A lista de adjacência representa cada vértice como uma lista de vértices(inteiros ou chars). Se existir uma ligação de um vértice A para um vértice B, então na lista do vértice A teremos o vértice B. Ou seja, na lista de cada vértice temos seus vizinhos. Se o grafo for ponderado em vez de termos uma lista de vértices teremos uma lista de pares onde o primeiro termo é o identificador do vértice e o segundo o peso da aresta.
Grafo VS Lista de adjacência - 1
Grafo VS Lista de adjacência - 2


Comparação: lista de adjacência VS matriz de adjacência


Lista VS Matriz

Matriz: em geral ocupa menos memória e se o grafo for denso é uma escolha melhor, fácil e eficiente verificação se há uma aresta entre 2 vértices.
Lista:  em geral é mais eficiente no que tange ao tempo,  fácil e eficiente verificação de quem são os vizinhos de um certo vértice.



Bibliografia

  • https://pt.wikipedia.org/wiki/Teoria_dos_grafos
  • http://www.ime.usp.br/~pf/algoritmos_em_grafos/aulas/grafos.html
  • http://www.ime.usp.br/~pf/teoriadosgrafos/texto/TeoriaDosGrafos.pdf
  • https://www.codechef.com/wiki/tutorial-graph-theory-part-1
  • http://noic.com.br/informatica/curso-noic-de-informatica/aula-8-grafos-parte-i-uma-breve-historia-de-grafos/


Teoria dos números - De onde vem as propriedades básicas de divisibilidade?

Olá,

Neste post vamos falar um pouco sobre um assunto básico de teoria dos números que é de certa forma recorrente em problemas. Não é estranho de vez em quando encontrar um problema que explora as propriedades básicas de divisibilidade de um número para obter uma solução de maneira mais eficiente ou simples (no final do post há alguns problemas que envolvem essa temática).

Mas algo mais interessante do que decorar as propriedades é entender de onde elas surgiram. E é isso que iremos ver aqui! Iremos discutir os critérios de divisibilidade por 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 17, 25.

  • CONCEITOS BÁSICOS
    • Dizemos que um inteiro n é divisível por um inteiro m(m > 0) se existe um inteiro k tal que:
n = m * k
    • Um número inteiro a na base 10 é definido da seguinte forma:

      a = an, an-1, an-2, an-3, ..., a3, a2, a1, a0. Onde n é o número de casas decimais do número a.

      Essa representação não é nada mais nada menos do que:

      a = an x 10^n + ... + a3 x 10³ + a2 x 10² + a1 x 10¹ + a0 x 10⁰
    • Uma notação comum, e que iremos utilizar apenas para poupar palavras, é m | n. Pode-se ler como m divide n.

Antes de iniciar a explicação de cada propriedade, aqui vai um resumo de todas as propriedades que serão abordadas:

Número   : Critério
-------------------------------------------------------------------------------------------------
2             : O último dígito é divisível por 2
-------------------------------------------------------------------------------------------------
3             : A soma dos dígitos é divisível por 3
-------------------------------------------------------------------------------------------------
4             : O número formado pelos últimos dois dígitos é divisível por 4
-------------------------------------------------------------------------------------------------
5             : O número termina em 0 ou 5
-------------------------------------------------------------------------------------------------
6             : É divisível por 3 e 2
-------------------------------------------------------------------------------------------------
7             : O valor do número(excluindo o último dígito) mais 2 vezes 
o último dígito é divisível por 7
-------------------------------------------------------------------------------------------------
8             : O número formado pelos últimos três dígitos é divisível por 8
-------------------------------------------------------------------------------------------------
9             : A soma dos dígitos é divisível por 9
-------------------------------------------------------------------------------------------------
10           : Termina em 0
-------------------------------------------------------------------------------------------------
11           : A soma dos dígitos nas posições pares menos a soma dos 
dígitos nas posições ímpares é divisível por 11
-------------------------------------------------------------------------------------------------
13           : O valor do número(excluindo o último dígito) mais 4 vezes 
o último dígito é divisível por 13
--------------------------------------------------------------------------------------------------
17           : O valor do número(excluindo o último dígito) mais 5 vezes o 
último dígito é divisível por 17
--------------------------------------------------------------------------------------------------
25           : O número termina em 00, 25, 50 ou 75.
--------------------------------------------------------------------------------------------------


  • Divisibilidade por 2 e qualquer potência de 2

    Esse é um critério bastante simples, um pensamento correto é: todo número par é divisível por 2. Seguindo a definição de número par: 2*k, k é um número inteiro. Todo número par termina em 0, 2, 4, 6 ou 8. Assim, qualquer número terminado nesses dígitos é divisível por 2.
    Mas vamos utilizar uma prova mais elaborada e que será útil para as provas de divisibilidade por 4 e 8, e qualquer potência de 2.

    O que queremos provar é: um número é divisível por 2 se e somente se o último dígito desse número é divisível por 2. 

    Como a implicação é se e somente se temos que provar o que foi dito nas "duas direções".

    Primeiramente, vamos considerar que m é um número divisível por 2 e 2 | m.
    Note que m é algo do tipo :
       
    m
     = mx 10^n + ... + m3 x 10³ + m2 x 10² + m1 x 10 + m0.

    De outra forma...
          m = 10 x (mx 10^(n-1) + ... + m3 x 10² + m2 x 10¹ + m1)+ m0.

    Dizendo que tudo em parênteses é igual a k.

     m = 10 x (k)+ m0.

    Assim, como 2 | m e 2 | 10k, então 2 | (m - 10k) = 2 | m0.

    Agora, vamos considerar que 2 | 
    m0. Novamente podemos escrevem m como:

     m = 10 x (k)+ m0.

    Como 2 | m0 então, m0 = 2c, onde c é um inteiro >= 0

     m = 10 x (k)+ m0.
     m = 10 x (k)+ 2c.
     m = 2 (5k + c)
    m = 2d, d é um inteiro >= 0

    Logo, se 2 | m0, então 2 | m.

    Agora vamos generalizar a prova para qualquer potência de 2, escolhemos colocar em evidência o 10, por que? Pois é uma potência de 10 e 2 | 10.
    E o que aconteceu com o número m0(primeiro dígito, ou seja que não tinha 10 como divisor)? Esse número(m0) que determinou a divisibilidade de todo o número(m).

    E isso continuará acontecendo para qualquer potência de 2. Exemplo: queremos provar o critério de divisibilidade por 4. O procedimento será o mesmo acima, porém em vez de colocar em evidência 10, colocaremos 100. Pois, 4 | 100. Assim irão sobrar os dois últimos dígitos que serão justamente os dígitos que irão determinar a divisibilidade de todo o número.

    O mesmo vale para 8, quem determina a divisibilidade são os 3 últimos dígitos, para 16, quem determina a divisibilidade são os 4 últimos dígitos, ..., para 2^n, quem determina a divisibilidade são os n últimos dígitos.
  • Divisibilidade por 3: A soma dos dígitos é divisível por 3

    A base para esta demonstração é provar o seguinte lema:

    Lema: todo número x = 10^n, n >= 1. x = 3q + 1, q >= 1.
    Prova: vamos provar por indução.
    caso base: o caso base é quando n = 1. Teremos: 
    x = 10^n = 10^1 = 10. 
    10 = 3q + 1, q = 3.

    indução: supondo que isso é verdade para n = k > 1. Vamos provar para n = k + 1.

     10^(k+1) = 10^k . 10 = (3q1 + 1) . 10 = (3q1 + 1) . (9 + 1) = 
     3(10q1 + 3) + 1 = 3(q2) + 1

    Assim, se temos um m e 3 | m :

     m = mx 10^n + ... + m3 x 10³ + m2 x 10² + m1 x 10 + m0.

     m = mx (3.qn + 1) + ... + m2 x (3.q2 + 1) + m1 x (3q1 + 1) + m0. 

     m = 3 (mn x qn + ... + m2 x q2 + m1 x q1) + (mn + ... + m2 + m1 + m0)

     m = 3k + s

    Desta maneira fica fácil de ver que se 3 | m, como 3 | 3k, 3 | s é verdade.
    Do mesmo modo o contrário. Se 3 | s, como 3 | 3k, então 3 | m é verdade.

  • Divisibilidade por 5
    Essa demonstração não será feita, pois pode ser feita uma prova similar a prova da divisibilidade por 2, se notarmos que podemos reescrever o critério como um número é divisível por 2 5 se e somente se o último dígito desse número é divisível por 2 5.

     
  • Divisibilidade por 6

    O critério de divisibilidade por 6 é ser divisível por 2 e 3. Como 2 e 3 são primos entre si, se temos um número 2 | a, ou seja a = 2k, e 3 | a, ou seja a = 3q. Podemos escrever a como algo do tipo: a = 6p (p =mdc(q,k)) , onde k,q >= 1. Apesar de não ser uma prova formal, essa ideia pode ser aplicada a qualquer número que possamos "destrinchar" em 2 números primos entre si. Exemplo: 12, critério de divisibilidade: ser divisível por 4 e 3.
  • Continuarei esse post em breve....
  • Bibliografia
    • http://www.mat.ufmg.br/~anacris/CriteriosDiv.pdf
    • https://pt.wikipedia.org/wiki/Crit%C3%A9rios_de_divisibilidade
    • http://educacao.uol.com.br/disciplinas/matematica/divisibilidade-1-criterios-mostram-se-divisao-e-possivel.htm

terça-feira, 15 de setembro de 2015

Banda da semana #2 - Alessia Cara


Olá, como semana passada esqueci de fazer isso, então... Essa semana teremos 2 bandas da semana porque finge que pode.

A de hoje vai ser Alessia Cara. Conheci pelo spotify e preciso compartilhar essa menina porque quando descobri mandei para todo mundo. Enfim, o gênero é um R & B, com um pouco de referência pop e uma voz meio Amy Whinehouse que no final da uma coisa maravilhosa. A voz dela é muito boa, e ela começou cantando alguns covers no youtube e recentemente lançou várias de suas músicas autorais, incluindo a canção Here que me fez esperar ansiosamente pelo que vem a seguir!

Um pouco do que é Alessia Cara:

Here


Bad Blood - cover


I can't feel my face - cover


quinta-feira, 3 de setembro de 2015

Banda da semana #1 - The Expendables


Vou tentar uma vez por semana sugerir uma banda que acho que vale a pena escutar e não é tão conhecida (mas deveria ser). Como já tá tarde não vou falar muito sobre a banda, amanhã posso complementar melhor, perdão haha.

O nome da banda é The Expendables, os caras são muito bons e tocam uma mistura de reggae com skate rock/hard rock que no mínimo vale a pena ouvir um álbum. E hoje descobri que teve álbum novo lançado esse ano <3 <3 <3. E ta muito bom!!! Vou colocar uns links da banda tocando ao vivo. Espero que curtam!

Obs: conheci a banda no Guitar Hero Warrios of Rock, a música deles estava no patch gratuito com músicas de reggae, direto do inimaginável! Baixei o patch sem pretensão nenhuma, só pegar umas musiquinhas free haha.

Lição do dia: você nunca sabe onde vai achar uma coisa maravilhosa :D!


A música do Guitar Hero - Sacrifice


Down Down Down

Álbum novo - Sand in the Sky

terça-feira, 1 de setembro de 2015

#Problema Aleatório 1 - Books Catalog/Catálogo de Livros (URI)

Olá, hoje vamos discutir o do problema Catálogo de Livros, do URI.
Ps: tente resolver antes de olhar a solução!

É uma questão bastante interessante para quem está começando a programar para olimpíadas, devido ao fato de envolver elementos bastante importantes na resolução de um problema: eficiência e simplesmente parar e pensar! Mas parar e pensar? Sim! Muitas vezes os problemas não exigem nenhum conhecimento computacional avançado ou específico, apenas uma ideia/lógica correta para solucionar o problema e saber organizar/codificar essa ideia já é suficiente! (Esse assunto pode ser discutido melhor em outra oportunidade, mas para adiantar problemas desse tipo geralmente são denominados AD-HOC).

Mas vamos ao problema! O enunciado de forma resumida diz o seguinte: Bino tem vários conjuntos de diferente livros, onde cada conjunto representa uma matéria(português, matemática, física, química e biologia).  Sabendo o valor  de cada livro de uma certa matéria, sua tarefa é informar qual a soma dos valores dos K conjuntos distintos de livros mais valiosos. Onde um conjunto é definido por uma coleção de livros de cada matéria, e um conjunto é dito diferente se há pelo menos um livro diferente.

Não entendeu nada, calma! Se entendeu tudo, vamos tentar entender ainda mais com o exemplo abaixo!

A entrada de forma resumida consiste em 6 linhas, as 5 primeiras definem respectivamente a coleção de livros de português, matemática, e assim por diante. Onde o primeiro inteiro n, é a quantidade de livros dessa matéria (1 <= n <= 5). E os demais n números que o seguem, (v1,v2,v3,...vi, onde i <= n e 1 <= vi <= 1000), são os valores de cada livro nessa coleção. A sexta linha contém apenas o inteiro K
O exemplo:



5 2 5 6 3 8
5 9 6 3 1 5
5 4 8 5 2 6
5 3 2 4 9 5
5 7 8 5 1 4
1


Qual nossa resposta para esse caso? Bem nesse caso é simples, como K é igual a 1, a pergunta que temos que responder é: Qual o maior valor possível de um conjunto formado por um livro de cada matéria? Basta colocarmos no nosso conjunto os maiores elementos de cada matéria.
Utilizaríamos os elementos pintados de verde, e assim nossa resposta seria 42.



5 2 5 6 3 8
9 6 3 1 5
5 4 8 5 2 6
5 3 2 4 9 5
5 7 8 5 1 4
1

8 + 9 + 8 + 9 + 8 = 42.

Se K fosse 2. O conjunto em verde acima, seria o conjunto de maior valor, e o segundo conjunto de maior valor é o conjunto em amarelo abaixo, cuja soma é 41 logo a resposta é 42 + 41 = 83.

5 2 5 6 3 8
9 6 3 1 5
5 4 8 5 2 6
5 3 2 4 9 5
7 8 5 1 4
1


8 + 9 + 8 + 9 + 7 = 41.

Certo, legal! Mas então quando K > 1  teremos que escolher algum elemento para tirar e colocar outro em seu lugar? E ir fazendo isso até que tenhamos a quantidade de K pedida, depois somamos tudo? SOCORROOOOO, isso ta parecendo muito complicado de codificar!
Como organizar quais já foram utilizados? Como saber quem tirar? O WA está batendo na nossa porta!

Então, como utilizar a ideia acima de forma mais simples?
Dica 1: sempre olhe o tamanho da entrada! Na maioria das vezes é isso quem vai dizer o quão eficiente sua resposta terá que ser (podemos detalhar isso em outra oportunidade) .
Dica 2: pense!!!!!

Bem, seguindo a dica 1, perceba que n (quantidade de livros de uma certa matéria) é menor ou igual a 5. O que é bem pequeno, isso nos da a liberdade de fazer uma solução não tão eficiente sem medo de TLE. Ainda seguindo a dica 1, perceba no enunciado original da questão que "(1 ≤ K ≤P*M*Q*F*B)". O que faz sentido já que teremos que escolher um conjunto, do tipo:


(p, m, q, f, b), onde p pertence ao conjunto de livros de português, m pertence ao conjunto de livros de matemática, ... 


Certo, agora vamos pensar! Temos que escolher um p para colocar no conjunto, quantos livros de português podemos escolher? Bem, no máximo 5 (1 <= n <= 5). E essa resposta é a mesma para os demais livros já que para todos n vai até 5. Então quantos conjuntos diferentes existem no máximo?
5*5*5*5*5 = 5⁵ = 3125. Podemos gerar essa informação que passa no tempo!

Então sabemos que podemos testar todos os conjuntos sem medo de levar TLE, então agora basta implementar isso! Como fazemos?

for p in portugues:

   for m in matematica:
      for f in fisica:
          for q in quimica:
             for b in biologia:
                 (p + m + f + q + b) é um valor de um conjunto!

Como obter a resposta final? Podemos guardar a informação anterior (em uma lista por exemplo), ordená-la, e TCHANRAAAAM a resposta será a soma dos K maiores valores!

Obrigada, espero que tenha ajudado! Segue o código se ficou alguma dúvida. 


Ps: não olhe o código sem ao menos tentar codificar sua solução!