Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.18 KB | None | 0 0
  1. from decimal import Decimal
  2.  
  3. read_ints = lambda : map(int, raw_input().split())
  4.  
  5. def valid(transmitters, D):
  6.     a = transmitters[0][1] - D
  7.     b = transmitters[0][1] + D
  8.     t = transmitters[0][0]
  9.     for T, P in transmitters[1:]:
  10.         A = P - D
  11.         B = P + D
  12.  
  13.         l = abs(T - t)
  14.  
  15.         if A > b + l:
  16.             return False
  17.         if B < a - l:
  18.             return False
  19.  
  20.         t = T
  21.         a = max(A, a - l)
  22.         b = min(B, b + l)
  23.         assert a <= b
  24.  
  25.     return True
  26.  
  27.  
  28. def solve():
  29.     N = read_ints()[0]
  30.  
  31.     transmitters = []
  32.     for n in range(N):
  33.         P, T = read_ints()
  34.         transmitters.append((Decimal(T), Decimal(P)))
  35.     transmitters.sort()
  36.  
  37.     lower = Decimal(0)
  38.     upper = max(t[0] for t in transmitters) - min(t[0] for t in transmitters)
  39.  
  40.     #i = 0
  41.     #while not valid(transmitters, i):
  42.     #    i += 1
  43.  
  44.     while upper - lower > Decimal(1) ** (-10):
  45.         mid = lower + (upper - lower) / Decimal(2)
  46.  
  47.         if valid(transmitters, mid):
  48.             upper = mid
  49.         else:
  50.             lower = mid
  51.  
  52.     return str(lower)
  53.  
  54. N = read_ints()[0]
  55. for n in range(1, N+1):
  56.     print 'Case #%d: %s' % (n, solve())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement