Campeonato de Robótica

Solução escrita por Malu Azevedo

Conhecimentos necessários:

O problema nos pede para determinar se é possível transformar a sequência inicial AA na sequência alvo BB realizando trocas entre elementos cuja distância na linha seja exatamente dd.

Ideia Central

Como a operação permitida troca apenas elementos que estão a uma distância exata dd, percebemos que podemos trocar elementos cujos índices deixam o mesmo resto quando divididos por dd. Isso significa que o array é dividido em dd grupos independentes, conhecidos como as classes de resto módulo dd. Dentro de cada um desses grupos, os elementos podem ser reordenados livremente de qualquer maneira. Portanto, para que a transformação seja viável, cada grupo de elementos com o mesmo resto módulo dd na sequência AA deve conter exatamente os mesmos valores que o grupo correspondente na sequência BB.

Abordagem Completa

Lemos os valores de NN e dd, seguidos pelas sequências AA e BB. Para verificar a condição, criamos estruturas para armazenar os elementos de cada resto módulo dd. Para cada índice de 0 a N-1, pegamos o elemento de AA e o de BB, e os agrupamos pelo seu resto correspondente módulo dd. Em seguida, ordenamos os elementos de cada grupo tanto para AA quanto para BB. Se todos os grupos forem idênticos nas duas sequências, significa que conseguimos organizar as caixas e imprimimos ‘S’, caso contrário, imprimimos ‘N’. A complexidade da solução é O(Nlog⁡N)O(N \log N)

Clique aqui para ver o código completo.