intxor=0; for (inti=0; i < n; i++) { for (intj=0; j < n; j++) { xor ^= grid[i][j]; xor ^= i * n + j + 1; } }
intmask= Integer.lowestOneBit(xor);
inta=0, b = 0; for (inti=0; i < n; i++) { for (intj=0; j < n; j++) { if ((mask & grid[i][j]) != 0) { a ^= grid[i][j]; } else { b ^= grid[i][j]; } if ((mask & (i * n + j + 1)) != 0) { // 注意此处需要加 1, 因为值的范围为 [1, n^2] a ^= i * n + j + 1; } else { b ^= i * n + j + 1; } } }
for (inti=0; i < n; i++) { for (intj=0; j < n; j++) { if (grid[i][j] == a) { returnnewint[]{a, b}; } } }