时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
你手里有无数个整数

(保证

)。还有无数个左右小括号

、
)
和加乘号

、

。现在希望你拼出来一个合法的表达式,使得式子的值为

。
允许你连续多次使用

,比如

为1时,可以

来拼出

,也可以用
*(1%2B1)*(1%2B1)%2B1%2B1%2B1)
来拼出

,但是使用最少的

的方案是使用

来拼出

。
现在希望你找到所有能拼出来值为

的表达式中,使用

最少的个数。如果不能拼出来,请输出

。
输入描述:
第一行一个正整数
表示数据组数(
)。
接下来
行,每行两个正整数分别表示
和
(
,
),
输出描述:
输出
行,每行一个整数表示本次询问的答案:如果能拼出来,请输出最少
的个数;如果不能拼出来,请输出
。
示例1
输入
复制
6
1 1
1 2
1 3
1 4
1 5
1 5000