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

por

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.