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

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

题目描述

你被困在一个密室中,面前有一个控制面板,上面有 nn 个开关,控制着密室中的 mm 盏灯。开关编号为 0,1,,n10, 1, \dots, n - 1,灯编号为 0,1,,m10, 1, \dots, m - 1

开关与灯的作用规则如下:

  • 按下第 ii 个开关(0i<n0 \leq i < n),会切换第 (imodm)(i \bmod m) 盏灯和第 (2×imodm)(2 \times i \bmod m) 盏灯的状态。
  • 如果这两个编号相同(即 imodm=2×imodmi \bmod m = 2 \times i \bmod m),则只切换这一盏灯的状态;
  • 切换指:如果灯是关闭的则打开,如果是打开的则关闭。

初始时,所有灯都处于关闭状态。你可以按任意次开关,每个开关可以被多次按下(也可以不按)。

你的目标是让所有灯最终都变为打开的状态。现在,请你计算:最少需要按多少次开关才能做到这一点;如果无论如何操作都无法让所有灯同时打开,则输出 1-1

输入格式

第一行包含一个整数 tt,表示测试数据组数。

接下来 tt 组数据,每组数据占一行,包含两个整数 nnmm,分别表示开关的数量和灯的数量。

输出格式

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

2
4 4
5 5
3
3

提示

【样例说明】

第一组数据:有 44 个开关(编号 00 - 33)和 44 盏灯(编号 00 - 33)。

开关控制关系:

  • 开关 00:控制灯 00(同一盏);
  • 开关 11:控制灯 11 和灯 22
  • 开关 22:控制灯 22 和灯 00
  • 开关 33:控制灯 33 和灯 22.

一种最优方案:按开关 11、开关 22、开关 33,共按 33 次。状态变化如下(关 =0= 0,开 =1= 1):

状态 控制灯 00 11 22 33
初始状态
按开关 11 1,21,2
按开关 22 2,02,0
按开关 33 3,23,2

第二组数据:有 55 个开关(编号 00 - 44)和 55 盏灯(编号 00 - 44)。

开关控制关系:

  • 开关 00:控制灯 00(同一盏);
  • 开关 11:控制灯 11 和灯 22
  • 开关 22:控制灯 22 和灯 44
  • 开关 33:控制灯 33 和灯 11
  • 开关 44:控制灯 44 和灯 33

一种最优方案:按开关 00、开关 11、开关 44,共按 33 次。状态变化如下:

状态 控制灯 00 11 22 33 44
初始状态
按开关 00 00
按开关 11 1,21,2
按开关 44 4,34,3

【评测用例规模与约定】

对于 20%20\% 的数据:1t31 \leq t \leq 31n,m81 \leq n, m \leq 8

对于 50%50\% 的数据:1t31 \leq t \leq 31n,m201 \leq n, m \leq 20

对于 80%80\% 的数据:1t51 \leq t \leq 51n,m1001 \leq n, m \leq 100

对于 100%100\% 的数据:1t51 \leq t \leq 51n,m10001 \leq n, m \leq 1000