Solução Fórmula 1

por

Solução de Roger Benet, comentários de Rogério Júnior

Clique aqui para ver o problema original.

Vamos criar uma $$struct$$ de nome $$piloto$$ para representarmos cada um dos pilotos.Ela guardará dois inteiros: $$pontos$$ e $$id$$ que deverão representar quantos pontos o piloto fez em um determinado sistema e seu número de identificação, respectivamente. Além disso, ela também guardará um vetor de $$100$$ inteiros de nome $$pos$$, que guardará, na posição $$i$$, quantas vezes o piloto foi o $$i$$-ésimo colocado.

Agora, vamos declarar um vetor de $$piloto$$ de nome $$vet$$, onde $$vet[i]$$ representa o piloto de identificação $$i$$. Primeiramente, percorreremos este vetor, atribuindo o valor correto de identificação ao elemento $$id$$ de cada posição e zerando os valores de $$pontos$$ e $$pos$$.

Para cada corrida, se o piloto $$j$$ ficou na posição $$x$$, aumentaremos o valor de $$vet[j].pos[x]$$ em uma unidade. Agora, para cada sistema de pontuação, atribuiremos o número de pontos feito pelo piloto $$i$$ ao elemento $$pontos$$ da posição $$i$$ de $$vet$$, da seguinte forma: para cada posição $$i$$ que dá pontos a um piloto, veremos quantos pontos ela ganha no sistema em que estamos olhando, chamaremos esse valor de $$x$$ e, para cada piloto $$j$$, adicionaremos a seus pontos (salvos no elemento $$pontos$$ de $$vet[j]$$)  a quantidade de vezes que ele ficou na posição $$i$$ (salva no elemento $$pos[i]$$ de $$vet[j]$$) multiplicada pelos $$x$$ pontos que essa posição dá.

Após atribuirmos a posição correta para cada piloto, basta ordenarmos o vetor $$vet$$ usando uma função que ordene pela maior quantidade de pontos, usando o menor índice como critério de desempate. Feito isso, imprimimos o identificador do piloto na primeira posição do vetor ordenado ($$vet[1].id$$, se indexarmos de $$1$$ a $$p$$) e de todos os outros, a partir da segunda posição, que têm pontuação igual à do primeiro, sempre com um espaço em branco antes do número. Feito isso, basta imprimir uma quebra de linha, zerarmos as pontuações de todos os pilotos e analisarmos o próximo sistema de pontuações. Segue o código comentado para melhor entendimento:

https://gist.github.com/rogerioagjr/3926dbd33b9d7c5fe238


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *