t=int(raw_input())
while t:
S,SG,FG,D,T=map(int,raw_input().strip().split(’ '))
dis=D/20.0
T=T/3600.0
speed=dis/T+S
g1=0
g2=0
g1=abs(SG-speed)
g2=abs(FG-speed)
if(g1<g2):
print ‘SEBI’
elif(g1>g2):
print ‘FATHER’
else:
print ‘DRAW’
t-=1
The probable reason could be you are printing ‘sebi’ instead SEBI…try to change it and submit…
IMP: While asking a doubt about a problem, its always better to provide the problem link and solution link rather than just copy-pasting the whole code here.
Problem: https://www.codechef.com/problems/SEBIHWY/
Solution (WA): https://www.codechef.com/viewsolution/14393074
Your code fails in the following testcase.
1
0 160 200 3 3
Correct Output:-
DRAW
Your Output
SEBI
You are facing precision error while using floating point.
A trivial example of this is:-
0.1 + 0.2 = 30000000000000004
In the above case, correct speed = 180 whereas, your code gives speed = 179.99999999999997 and hence prints 'SEBI instead of ‘DRAW’.
This is because you are dividing one float variable with other float variable and the intermediate result cannot be stored precisely in a floating point.
If you change this
dis = D / 20.0
T = T / 3600.0
speed = dis / T + S
to this
speed = D * 180.0 / T
then you should get an AC.
As a general rule, try to avoid intermediate floating point division as mush as possible.
You can read more about precision error in floating point in Python in the following links.
https://docs.python.org/2/tutorial/floatingpoint.html
https://stackoverflow.com/questions/588004/is-floating-point-math-broken