Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.34 KB | None | 0 0
  1. from math import atan,sin,cos
  2. xs,ys,xf,yf = [int(i) for i in input().split()]
  3. n = int(input())
  4.  
  5. minim = "a"
  6. maxim = "a"
  7. d = []
  8. for i in range(n):
  9.     o = [int(k) for k in input().split()]
  10.     d.append(o)
  11. if ys == yf:
  12.     e = 1
  13. elif xs == xf:
  14.     e = 0
  15. else:
  16.     e = 0
  17.     tg = (yf-ys)/(xf-xs)
  18.     for i in range(n):
  19.         x = d[i][0]
  20.         d[i][0] = d[i][0]*cos(atan(tg)) - d[i][1]*sin(atan(tg))
  21.         d[i][1] = x*sin(atan(tg)) + d[i][1]*cos(atan(tg))
  22. for i in range(n):
  23.     o = d[i]
  24.     r = o[2]
  25.     y = o[e]
  26.     if minim == "a":
  27.         minim = y-r
  28.     if minim > y-r:
  29.         minim = y-r
  30.     if maxim == "a":
  31.         maxim = y+r
  32.     if maxim < y+r:
  33.          maxim = y+r
  34.    
  35. d.sort(key=lambda o:o[e])
  36. pr = [minim]
  37. for i in range(n):
  38.     o = d[i]
  39.     y = o[e]
  40.     r = o[2]
  41.        
  42.     if i != 0:
  43.         opred = d[i-1]
  44.         ypred = opred[e]
  45.         rpred = opred[2]
  46.         if y-r > ypred+rpred or y-r <= ypred-rpred:
  47.             pr.append(y-r)
  48.     if i != n-1:
  49.         oposl = d[i-1]
  50.         yposl = oposl[e]
  51.         rposl = oposl[2]
  52.         if y+r < yposl-rposl or y+r >= yposl+rposl:
  53.             pr.append(y+r)
  54. pr.append(maxim)
  55. pr = sorted(list(set(pr)))
  56.    
  57. res = 0
  58. for i in range(len(pr)-1):
  59.     if i % 2 == 1:
  60.         if pr[i+1] - pr[i] > res:
  61.             res = pr[i+1]-pr[i]
  62.  
  63. print(res)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement