Skip to content

Latest commit

 

History

History
114 lines (86 loc) · 4.83 KB

p1.md

File metadata and controls

114 lines (86 loc) · 4.83 KB

Prova 1 - Editorial

A - Palíndromos, palíndromos everywhere!

Esta questão utiliza o algoritmo de palíndromos, o qual você deve checar se a posição i da string é equivalente a posição N - 1 - i, para todo i de [0, N - 1], onde N é o tamanho da string.

O primeiro passo era verificar se a linha dada, sem espaços, era um palíndromo, pois tanto o "Palindromo Completo" e a "Frase palindromo" eram palíndromos, caso os espaços fossem removidos. Se esta condição não fosse satisfeita, ai era "Nada".

Sabendo que a linha é um palíndromo, você deve verificar se cada palavra da linha também é um palindromo.

B - Armandolang

Nesta questão você deve utilizar a pilha, cujo o comportamento está implementado na stack do C++, ou pode ser simulado com o vector. A ideia desta estrutura é fazer o comportamento FIFO (first-in first-out), o último que entrou é o primeiro a sair.

A ideia central da questão era toda vez que se encontrava um character de abertura ( [ {, eles eram adicionados ao fim do seu vector (push_back). Quando era encontrado um caracter de fechar ) ] }, se verificava se o último caracter adicionado no vector, v.size() - 1 ou v.back(), era o correspondente a aquele caracter de fechar. Ou seja, se eu encontrei o caracter ), então o último de abrir adicionado deveria ser o (, caso contrário sua expressão era inválida, pois cairia no caso {) por exemplo.

Quando se achava um caso que deu certo, ou seja, abriu e fechou o mesmo tipo de caracter. O caracter de abertura era removido do vector, pop_back. Ao final, caso tudo que abriu, tenha fechado corretamente, o seu vector irá estar vazio. Caso não esteja, ele abriu mais caracteres do que fechou, por exemplo o caso ((()).

C - Movimentação em Tiles

Nesta questão deve ser analisar como se faz o movimento em uma grade. Como explicado na questão, o jogador pode se mover para qualquer uma das 8 direçẽos, o que inclui a diagonais. Então considere uma grade 8x8, um tabuleiro de xadrez.

  • Para sair da casa (1, 1) para a casa (8, 8), se percorre a diagonal que tem 8 casas.
  • Para sair da casa (1, 1) para a casa (7, 8), você percorre boa parte do caminho na diagonal até a coluna 7, casa (7, 7), e sobe um quadrado para a linha 8, ou seja, você percorre 8 casas.
  • Para sair da casa (1, 1), para a casa (3, 8), você percorre parte do caminho na diagonal até a coluna 3, e sobe 5 casas até a linha 8, ou seja, você percorre 8 casas.

Não importa de onde você saia ou para onde você vá, você sempre irá percorrer a maior distância entre as diferenças dos pares ordenados, ou seja, max(|x1 - x2|, |y1 - y2|).

D - Eleições Bagunçadas

O objetivo central da questão é fazer um histograma dos votos. Um histograma contabiliza quantas ocorrências aconteceram de um certo evento, nosso evento no caso é o número em que o eleitor votou.

Um dos modos de fazer isso é utilizar um array de tamanho N, onde N é o número máximo de um cadidatos, ou seja, se existem os seguintes candidatos: 88 32 43 90 62, o N deveria ser no mínimo 90. O N escolhido para esta questão deve ser inferido da seção "Entrada", lá fala que o valor do voto V esta entre [1, 10000], ou seja, seu N deve ser no mínimo 10000.

Com este array, a cada voto v lido, você pode utilizar v como indice do seu array, e contabilizar o voto para o candidato daquele indice, candidato[v]++. Após analisar todos os votos, o seu array terá formado o histograma de candidatos, e você sabe que os candidatos que tem 0 votos não estão participando, e que o candidato com mais votos foi o vencedor.

E - Funcionários, ordem!

Nesta questão você deve utilizar ordenação, sort, para ordenar o vector de idades. Para linkar os nomes as idades, deve-se prestar atenção ao enunciado. Como a questão restringe que as idades serão únicas, você pode criar um array, que mapeia o indice para um nome, onde o indice vai ser a idade daquela pessoa.

Então após ordernar, basta percorrer o vector ordenado e buscar os nomes do array de nomes.