O enunciado é meio confuso, mas depois de alguns minutos não é tão difícil entender. Ele basicamente descreve que tem dois tipos de operações (que ele chamou de "queries"). Ambas estão no formato 1 x y
ou 2 x y
, ou seja, o primeiro número pode ser 1 ou 2, e os dois números seguintes serão os valores de x
e y
.
Depois ele descreve o que fazer com cada operação: se for 1, faça tais operações, se for 2, faça outras. Ele usa um símbolo estranho (se não me engano é esse: ⨁) para indicar a operação XOR, e descreve em detalhes o algoritmo. Em resumo:
- criar um array
arr
de 2 dimensões (no caso do C#, ele usouList
, mas a ideia é a mesma). A lista temn
sublistas - inicialize
lastAnswer
com zero - se a query for 1:
- faça
idx
ser igual a(x ^ lastAnswer) % n
- adicione
y
na lista que está na posiçãoidx
do arrayarr
- faça
- se a query for 2:
- faça
idx
ser igual a(x ^ lastAnswer) % n
- faça
lastAnswer
ser igual aarr[idx][y % arr[idx].Count]
- adicione
lastAnswer
no array de respostas (que é o que o métododynamicArray
vai retornar no final)
- faça
Traduzindo para código, ficaria assim:
public static List<int> dynamicArray(int n, List<List<int>> queries)
{
List<List<int>> arr = Enumerable.Range(0, n).Select(i => new List<int>()).ToList();
List<int> answers = new List<int>();
int lastAnswer = 0;
foreach (var q in queries)
{
var x = q[1];
var y = q[2];
if (q[0] == 1)
{
arr[(x ^ lastAnswer) % n].Add(y);
}
else if (q[0] == 2)
{
var idx = (x ^ lastAnswer) % n;
lastAnswer = arr[idx][y % arr[idx].Count];
answers.Add(lastAnswer);
}
}
return answers;
}
Acabei de mandar lá e passou.