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
arrde 2 dimensões (no caso do C#, ele usouList, mas a ideia é a mesma). A lista temnsublistas - inicialize
lastAnswercom zero - se a query for 1:
- faça
idxser igual a(x ^ lastAnswer) % n - adicione
yna lista que está na posiçãoidxdo arrayarr
- faça
- se a query for 2:
- faça
idxser igual a(x ^ lastAnswer) % n - faça
lastAnswerser igual aarr[idx][y % arr[idx].Count] - adicione
lastAnswerno array de respostas (que é o que o métododynamicArrayvai 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.