Problem:


A : Taps / 蛇口

Problem

あいづ君の家の浴槽には2つの蛇口 A, B がついており、 ひねるとひねった角度に比例した量の水が出てくる。 出てくる水の温度は A は tA [℃]、B は tB [℃]で一定である。 風呂に入るときにはそれらの量を調節して混ぜあわせることで適度な温度になるようにしている。

tA [℃] の水 vA [L] と tB [℃]の水 vB [L] を混ぜ合わせた後の温度は、(tA × vA + tB × vB) / (vA + vB) になる。 例えば、tA = 80℃, tB = 20℃ で 40℃ のお湯を張りたいときには、 A から 100mL/s 、 B から 200mL/s ずつ出るように蛇口を調節すればよい。

ところが、このごろ蛇口が老朽化してきたため A は dA [mL/s] 、B は dB [mL/s] 単位でしか 出る水の量を調節できなくなってしまった。 すなわち、A から出る水の量が 0, dA, 2×dA, 3×dA, ...[mL/s] という 飛び飛びの値にしか設定できなくなってしまったのである(B も同様)。

あいづ君は長年培ってきた勘によって狙った温度ぴったりに 調節できたのだが、それが通用しなくなった。 困ったあいづ君は、自動的に目的の温度 T[℃] に最も近い温度になるような水の出し方に調節するプログラムを書くことにした。 ただし、毎秒出せる水の量には上限があり、 A と B の水の量の和は D [mL/s] 以下でなければならない。 また、水を出さないことにはお風呂に入れないため、毎秒出る水の量は最低でも 1mL/s 以上でなければならない。 つまり、 1 ≦ A から出る水の量 + B から出る水の量 ≦ D を満たす必要がある。

Input

入力は次のような形式で与えられる．

T D
tA tB
dA dB

1行目の T, D は、それぞれ目的の温度、水の量の上限を表す。 2行目の tA, tB は、それぞれ A の温度、 B の温度を表す。 3行目の dA, dB は、それぞれ A から出る水の量の単位、 B から出る水の量の単位を表す。

Constraints

入力は全て整数である。

1 ≦ T, tA, tB ≦ 99

1 ≦ D ≦ 1000

1 ≦ dA, dB ≦ D

Output

T に最も近くなるように水を混ぜあわせた後の温度とT との差の大きさの最小値を1行で出力せよ。ただし、10-4 以下の誤差は許容される。

Samples

Sample Input 1

40 1000
80 20
100 100

Sample Output 1

0.0000000000

問題文の例である。

Sample Input 2

38 1000
80 20
100 95

Sample Output 2

0.2222222222

Aの蛇口から 200mL/s、Bの蛇口から 475mL/s の量の水を出したとき、37.7777...℃ となり、これが38℃ に最も近くなる。


Sample input:
40 1000
80 20
100 100


Sample output:
0.0000000000

Submission status: Accepted

Solution code:
T, D = list(map(int, input().split()))
ta, tb = list(map(int, input().split()))
da, db = list(map(int, input().split()))

ans = 10000000007



for i in range(D//da+1):
    for j in range(D//db+1):
        if (i*da + j*db <= D) and (i*da + j*db >= 1):
            tmp = (ta*i*da + tb*j*db)/(i*da + j*db)
            ans = min(abs(ans), abs(T - tmp))

print(ans)

Submission status: Accepted

Solution code:
import sys
T,D = [int(x) for x in sys.stdin.readline().split()]
t = [int(x) for x in sys.stdin.readline().split()]
d = [int(x) for x in sys.stdin.readline().split()]
ans = float("inf")
for i in range(D+1):
    va = d[0]*i
    if va > D:continue
    for j in range(D+1):
        vb = d[1]*j
        k = va+vb
        if k > D or k < 1:continue
        T_ = va*t[0]+vb*t[1]
        T_ /= k
        if abs(T-T_) < ans:
            ans = abs(T-T_)
print(ans)

Submission status: Accepted

Solution code:
t, d = map(int, input().split())
ta, tb = map(int, input().split())
da, db = map(int, input().split())
min_score = min([abs(t - (ta * va + tb * vb) / (va + vb)) for va in range(0, d + 1, da) for vb in range(0, d + 1, db) if 1 <= va + vb <= d])
print(min_score)