分类讨论最多和最少的情况即可。
对于最多的情况,我们先贪心的给他分配最小的,设
,整除后
,同时
。如果
为0,那么可以整除,最大就是
,
否则,我们可以将多出来的部分,分配到已经分配好的d个集合中,他们现在全为
,那么还能够分配进去的个数最多为
。只要m不超过这个数,就能够分配好。
对于最少的情况类似,请读者自行分析,有疑问可评论区提出。
import sys
# 输入加速
input = sys.stdin.readline
if __name__ == '__main__':
t = int(input())
for _ in range(t):
a,b,l,r = map(int,input().split())
diff = b - a
d1,m1 = divmod(diff,l)
# 最多的情况:
mx = d1
if m1 > 0:
if m1 <= d1 * (r - l):
pass
else:
print(-1)
continue
d2,m2 = divmod(diff,r)
#最少的情况
mn = d2
if m2:
mn += 1
print(mn,mx)