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.
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
((())
.
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 tem8
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ê percorre8
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|)
.
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.
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.