1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/与非的谜题 [ryfUiz].md
2023-05-15 17:43:00 +08:00

55 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

在永恒之森中,封存着有关万灵之树线索的卷轴,只要探险队通过最后的考验,便可以获取前往万灵之树的线索。
探险队需要从一段不断变化的谜题数组中找到最终的密码,初始的谜题为长度为 `n` 的数组 `arr`(下标从 0 开始),数组中的数字代表了 `k` 位二进制数。
破解谜题的过程中,需要使用 `与非NAND` 运算方式,`operations[i] = [type,x,y]` 表示第 `i` 次进行的谜题操作信息:
-`type = 0`,表示修改操作,将谜题数组中下标 `x` 的数字变化为 `y`
-`type = 1`,表示运算操作,将数字 `y` 进行 `x*n` 次「与非」操作,第 `i` 次与非操作为 `y = y NAND arr[i%n]`
> 运算操作结果即:`y NAND arr[0%n] NAND arr[1%n] NAND arr[2%n] ... NAND arr[(x*n-1)%n]`
最后,将所有运算操作的结果按顺序逐一进行 `异或XOR`运算,从而得到最终解开封印的密码。请返回最终解开封印的密码。
**注意:**
- 「与非」NAND的操作为先进行 `与` 操作,后进行 `非` 操作。
> 例如:两个三位二进制数`2`和`3`,其与非结果为 `NOT ((010) AND (011)) = (101) = 5`
**示例 1**
> 输入:
> `k = 3`
> `arr = [1,2]`
> `operations = [[1,2,3],[0,0,3],[1,2,2]]`
>
> 输出: `2`
>
> 解释:
> 初始的谜题数组为 [1,2],二进制位数为 3
> 第 0 次进行运算操作,将数字 3(011) 进行 2\*2 次「与非」运算,
> 运算操作结果为 `3 NAND 1 NAND 2 NAND 1 NAND 2 = 5`
> 第 1 次进行修改操作,谜题数组的第 `0` 个数字变化为 `3`,谜题变成 `[3,2]`
> 第 2 次进行运算操作,将数字 2(010) 进行 2\*2 次「与非」运算,
> 运算操作结果为 `2 NAND 3 NAND 2 NAND 3 NAND 2 = 7`
> 所有运算操作结果进行「异或」运算为 `5 XOR 7 = 2`
> 因此得到的最终密码为 `2`。
**示例 2**
> 输入:
> `k = 4`
> `arr = [4,6,4,7,10,9,11]`
> `operations = [[1,5,7],[1,7,14],[0,6,7],[1,6,5]]`
> 输出: `9`
> 解释:
> 初始的谜题数组为 [4,6,4,7,10,9,11],
> 第 0 次进行运算操作,运算操作结果为 5
> 第 1 次进行运算操作,运算操作结果为 5
> 第 2 次进行修改操作,修改后谜题数组为 [4, 6, 4, 7, 10, 9, 7]
> 第 3 次进行运算操作,运算操作结果为 9
> 所有运算操作结果进行「异或」运算为 `5 XOR 5 XOR 9 = 9`
> 因此得到的最终密码为 `9`。
**提示:**
- `1 <= arr.length, operations.length <= 10^4`
- `1 <= k <= 30`
- `0 <= arr[i] < 2^k`
-`type = 0``0 <= x < arr.length` `0 <= y < 2^k`
- `type = 1``1 <= x < 10^9` `0 <= y < 2^k`
- 保证存在 `type = 1` 的操作