思路:模拟
如果S<T,则一定有解,解为K=1,D=T−S
否则一定无解
代码
C++
题目内容
有一种简单的数字变换方式:每次操作可以将当前数值增加一个固定的正整数。现在有 t 组询问,每组询问给出一个起始值 S 和一个目标值 T。你需要构造两个正整数 K 和 D,使得对 S 执行 K 次操作(每次增加 D)后,S 恰好等于 T。如果存在合法的 K 和 D,请输出任意一组;如果无法构造,则输出两个 -1。
所有询问中,t 不超过 100,S 和 T 均为正整数且不超过 100。
输入描述
第一行包含一个正整数 t,表示询问的组数。接下来的 t 行,每行包含两个正整数 S 和 T,分别表示起始值和目标值。
输出描述
对于每组询问,输出一行两个整数,用一个空格分隔。若有解,输出任意一组正整数 K 和 D;若无解,输出 -1 和 -1。
样例1
输入
1
3 10
输出
7 1
说明
只有一组询问,起始值 S=‘3‘,目标值 T=‘10‘。因为 3<10,差值 T−S=‘7‘。构造 K=‘7‘,D=‘1‘ 即可满足 3+7×1=10。
样例2
输入
3
1 5
8 8
100 50
输出
4 1
-1 -1
-1 -1
说明
共有三组询问。
第一组 S=‘1‘, T=‘5‘:1<5,构造 K=5−1=‘4‘, D=‘1‘,满足 1+4×1=5。
第二组 S=‘8‘, T=‘8‘:起始值等于目标值,无法通过正整数次增加正整数达到,输出 -1 -1。
第三组 S=‘100‘, T=‘50‘:起始值大于目标值,增加正整数只会使值变大,无法到达更小的目标,输出 -1 -1。
样例3
输入
1
99 100
输出
1 1
说明
边界情况:起始值 S=‘99‘,目标值 T=‘100‘,差值仅为 1。构造 K=‘1‘, D=‘1‘,只需 1 次操作增加 1 即可达到目标。