两个执行器共享作业的算法

时间:2013-10-04 08:24:43

标签: algorithm queue

我在测试一些网站时遇到了以下问题:

  

约翰和玛丽创办了J& M出版社并购买了两台旧打印机   装备它。现在他们有了他们的第一个商业交易 - 打印一个   由N页组成的文件。看来打印机工作在   不同的速度。一个在X秒内生成一个页面,另一个生成页面   Y秒。所以现在公司创始人对他们的最短时间感到好奇   可以花两个打印机打印整个文档。

(取自http://codeabbey.com/index/task_view/two-printers

我认为这是贪婪算法的问题,但是它被告知N可能高达十亿,所以可能有一些我看不到的更简单的解决方案。我能不能以某种方式将它们按比例分配给X和Y?

2 个答案:

答案 0 :(得分:2)

这似乎是一个数学问题,而不是算法问题。作业分配为YN/(X+Y)页面到XXN/(X+Y)页面到Y。总时间XYN/(X+Y)是最佳的(请注意,它等同于N/(1/X + 1/Y)。由于YN/(X+Y)可能不是整数,因此您只需计算一些值(如果X向上舍入,Y向下舍入,反之亦然),然后采取最小值。或者如你所说,你可以向下舍入并将任何剩余的作业提供给更快的机器。

答案 1 :(得分:0)

for i in range(int(input())):
    x,y,n = list(map(float, input().split()))
    x_1 = int(y*n / (x+y))
    y_1 = int(x*n/ (x+y))
    n = n - (x_1 + y_1)
    x_ans = int(max( (x_1 + n)* x, y_1 * y))
    y_ans = int(max( x_1 * x, (y_1 + n) * y))

    print(min(x_ans,y_ans),end=' ')