第三题是拓扑排序吗?
第四题我也是暴力8%,考完后推了一下,每一个k需要A和B的数量分配情况,假设这个k里面A数量为a,a~[1,k-1],实际上a不用遍历,是否满足是看m,n里面够不够分配,解两个不等式组就有个判断条件,满足a的下界<=上界就存在k,不满足则这样的k不存在。简单数据测了一下好像是对的?
# input
if n<m:
    n,m=m,n
#n>m
# k cannot be 1, always could be n+m
res=1
for k in range(2,n+m):
    q,rem=divmod(n+m,k)
    hb=min(n//q,int(k-m/(q+1)))
    lb=max((math.ceil(n/(q+1)),math.ceil(k-m/q),(k+1)//2))
    if hb>=lb:
        res+=1
print(res)