Задачи
November 22, 2023

Задача. Исходный массив

Задача. Дан целочисленный массив pref размера N.

Необходимо вернуть массив arr размера N, где

pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i].
^ - это операция XOR.

Пример

pref = [5,2,0,3,1]
Output: [5,7,2,3,2]

Примечание

- pref[0] = 5.
- pref[1] = 5 ^ 7 = 2.
- pref[2] = 5 ^ 7 ^ 2 = 0.
- pref[3] = 5 ^ 7 ^ 2 ^ 3 = 3.
- pref[4] = 5 ^ 7 ^ 2 ^ 3 ^ 2 = 1.

Разбор

Чтобы решить эту задачу достаточно вспомнить свойство операции XOR:

a XOR b = c
a XOR c = b

Значит если

pref[1] = arr[0] ^ arr[1] = 5 ^ 7 = 2

То

arr[1] = arr[0] ^ pref[1] = 5 ^ 2 = 7

Очевидно, что arr[0] == pref[0].

Тогда получаем обратную формулу:

arr[i] = pref[0] ^ pref[1] ^ ... ^ pref[i]

Реализация

public static int[] FindOriginArray(int[] pref)
{
	int[] res = new int[pref.Length];
   res[0] = pref[0];
   for (int i = 1; i < pref.Length; i++)
   {
        res[i] = pref[i - 1] ^ pref[i];
   }
   return res;
}

https://gist.github.com/unilecs/1030d13856f4ccafaf0d7598eb585d8f

Play-test

https://dotnetfiddle.net/hprna7