почему мой ответ отклоняется на долю от фактического результата? - PullRequest
0 голосов
/ 10 июля 2019

Два друга Кунал и Сатьям играют в интересную игру.Они по очереди вытягивают мяч из сумки, в которой изначально находится R красных шаров и G зеленых шаров.Каждый игрок поочередно рисует мяч и никогда не кладет его обратно.Человек, который первым нарисовал красные шары, побеждает.Сатьям всегда рисует первым.Если в сумке больше нет шаров, и никто не нарисовал красный шар, Сатьям побеждает.

Какова вероятность победы Сатьяма?

Input:
The first line will contain the number of test cases T.
The first line of each test case will contain a number R (number of red balls) and G(number of green balls )

Output 
For each testcase, print the desired probability.

Ограничения:

1<=T<=10
0<=R,G<=10^3

Я пытался решить эту проблему на динамическом программировании, прошел несколько тестовых случаев, но не смог в других тестовых случаях из-за дробной разницы между моим ответом и фактическим ответом.например, один из правильных ответов для тестовых случаев - 0,877258, а вывод через мой код - 0,877216

. Это мой код для решения вопроса

def ways(l):
    x=[]
    if l[0]==0 or l[1]==0:
        return format(1,".6f")
    x.append(l[0]/(l[0]+l[1]))
    x.append((l[1]/(l[0]+l[1]))*((l[1]-1)/(l[0]+l[1])))
    total=l[0]+l[1]
    sum1=x[0]
    n=l[1]
    for i in range(2,n+1):
        if i%2==0:
            f=round((x[i-1]*(l[0]/(total-i))),100)
            #print("e ",f)
            x.append(f)
            sum1+=x[i]
            #print(sum1)
            if n-i==0:
                return format(sum1,".6f")
        else:
            if n-(i-1)==1:
                f=round((x[i-2]*((n-(i-1))/(total-(i-1)))),100)
                #print("o ",f)
                x.append(f)
                sum1+=x[i]
                return format(sum1,".6f")
            else:
                f=round((x[i-2]*((n-(i-1))/(total-(i-1)))*((n-i)/(total-i))),100)
                #print("o ",f)
                x.append(f)
    return format(sum1,".6f")

t=int(input())
for x in range(t):
    l=[int(i) for i in input().split()]
    print(ways(l))

Напишите свой кодздесь

функция way вычисляет вероятность выигрыша.

this is the input to the program...
here 10 in the first line denotes the number of test cases
10
1 0
0 0
0 1
1000 0
0 1000
999 999
882 456
345 234
12 45
345 56

правильный вывод -

1.000000
1.000000
1.000000
1.000000
1.000000
0.666630
0.745750
0.712027
0.558313
0.877258

и вывод через мой код -

1.000000
1.000000
1.000000
1.000000
1.000000
0.666546
0.745685
0.711826
0.552211
0.877216

так как получить правильный вывод?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...