Solução Informática - Nível Iniciante - Semana 29

Escrito por Vitor Veiga

Conhecimento prévio necessário:

Temos um vetor A = A_1,A_2...,A_n e 2 intervalos de mesmo tamanho, A_{pq} = A_p,A_{p+1},...,A_q e A_{rs} = A_r,A_{r+1},...,A_s. Queremos trocar os valores dessas duas sequências dentro do vetor, ou seja, deixar os intervalos A_{pq} = A_r,A_{r+1},...,A_s e A_{rs} = A_p,A_{p+1},...,A_q.

A chave para a resolução dessa questão é observar que a distância entre os dois valores trocados será sempre igual a r - p. Sabendo disso, basta passar por todo o intervalo p,q trocando seus valores com os valores dos índices exatamente r - p maiores que os seus.

Para melhor entendimento, utilizaremos como exemplo a primeira entrada:

A = 1,2,3,4,5,6,7,8 e P = 1, Q = 3, R = 5, S = 7
R - P = 4
basta então realizar as trocas swap(A_P, A_{P+4}), swap(A_{P+1}, A_{P+5}), swap(A_{P+2}, A_{P+6})
resultando, assim, no vetor 5, 6, 7, 4, 1, 2, 3, 8

Recomendamos que você tente implementar o problema antes de ver o código. Para conferi-lo, clique aqui.