P16263 [蓝桥杯 2026 省 Python B 组] 密室逃脱开关谜题

题目描述

你被困在一个密室中,面前有一个控制面板,上面有 $n$ 个开关,控制着密室中的 $m$ 盏灯。开关编号为 $0, 1, \dots, n - 1$,灯编号为 $0, 1, \dots, m - 1$。 开关与灯的作用规则如下: - 按下第 $i$ 个开关($0 \leq i < n$),会切换第 $(i \bmod m)$ 盏灯和第 $(2 \times i \bmod m)$ 盏灯的状态。 - 如果这两个编号相同(即 $i \bmod m = 2 \times i \bmod m$),则只切换这一盏灯的状态; - 切换指:如果灯是关闭的则打开,如果是打开的则关闭。 初始时,所有灯都处于关闭状态。你可以按任意次开关,每个开关可以被多次按下(也可以不按)。 你的目标是让所有灯最终都变为打开的状态。现在,请你计算:最少需要按多少次开关才能做到这一点;如果无论如何操作都无法让所有灯同时打开,则输出 $-1$。

输入格式

第一行包含一个整数 $t$,表示测试数据组数。 接下来 $t$ 组数据,每组数据占一行,包含两个整数 $n$ 和 $m$,分别表示开关的数量和灯的数量。

输出格式

对于每组数据,输出一行,包含一个整数,表示最少需要按开关的次数。如果无法让所有灯都打开,输出 $-1$。

说明/提示

### 【样例说明】 第一组数据:有 $4$ 个开关(编号 $0$ - $3$)和 $4$ 盏灯(编号 $0$ - $3$)。 开关控制关系: - 开关 $0$:控制灯 $0$(同一盏); - 开关 $1$:控制灯 $1$ 和灯 $2$; - 开关 $2$:控制灯 $2$ 和灯 $0$; - 开关 $3$:控制灯 $3$ 和灯 $2$. 一种最优方案:按开关 $1$、开关 $2$、开关 $3$,共按 $3$ 次。状态变化如下(关 $= 0$,开 $= 1$): | 状态 | 控制灯 | 灯 $0$ | 灯 $1$ | 灯 $2$ | 灯 $3$ | |:------------:|:------:|:------:|:------:|:------:|:------:| | 初始状态 | | 关 | 关 | 关 | 关 | | 按开关 $1$ | 灯 $1,2$ | 关 | 开 | 开 | 关 | | 按开关 $2$ | 灯 $2,0$ | 开 | 开 | 关 | 关 | | 按开关 $3$ | 灯 $3,2$ | 开 | 开 | 开 | 开 | 第二组数据:有 $5$ 个开关(编号 $0$ - $4$)和 $5$ 盏灯(编号 $0$ - $4$)。 开关控制关系: - 开关 $0$:控制灯 $0$(同一盏); - 开关 $1$:控制灯 $1$ 和灯 $2$; - 开关 $2$:控制灯 $2$ 和灯 $4$; - 开关 $3$:控制灯 $3$ 和灯 $1$; - 开关 $4$:控制灯 $4$ 和灯 $3$。 一种最优方案:按开关 $0$、开关 $1$、开关 $4$,共按 $3$ 次。状态变化如下: | 状态 | 控制灯 | 灯 $0$ | 灯 $1$ | 灯 $2$ | 灯 $3$ | 灯 $4$ | |:------------:|:------:|:------:|:------:|:------:|:------:|:------:| | 初始状态 | | 关 | 关 | 关 | 关 | 关 | | 按开关 $0$ | 灯 $0$ | 开 | 关 | 关 | 关 | 关 | | 按开关 $1$ | 灯 $1,2$ | 开 | 开 | 开 | 关 | 关 | | 按开关 $4$ | 灯 $4,3$ | 开 | 开 | 开 | 开 | 开 | ### 【评测用例规模与约定】 对于 $20\%$ 的数据:$1 \leq t \leq 3$,$1 \leq n, m \leq 8$; 对于 $50\%$ 的数据:$1 \leq t \leq 3$,$1 \leq n, m \leq 20$; 对于 $80\%$ 的数据:$1 \leq t \leq 5$,$1 \leq n, m \leq 100$; 对于 $100\%$ 的数据:$1 \leq t \leq 5$,$1 \leq n, m \leq 1000$。