fork download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4.  
  5. class Main
  6. {
  7. public static void main (String[] args) throws java.lang.Exception
  8. {
  9. final double e = 10e-8;
  10. Scanner in = new Scanner(System.in);
  11. double x1, y1, x2, y2;
  12. x1=in.nextDouble();
  13. y1=in.nextDouble();
  14. x2=in.nextDouble();
  15. y2=in.nextDouble();
  16. double d, a, b;
  17. d = Math.abs((y2 * x1 - x2 * y1) / Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
  18. //Растояние до точки на отрезке, ближайщей к началу координат
  19. a = Math.sqrt(x1 * x1 + y1 * y1);
  20. //Растояние от начала координат до первой точки
  21. b = Math.sqrt(x2 * x2 + y2 * y2);
  22. //Растояние от начала координат до второй точки
  23. int count = 0;
  24. if ((2 * x1 * x1 - 2 * x1 * x2 + 2 * y1 * y1 - 2 * y1 * y2 < 0) | (2 * x2 * x2 - 2 * x1 * x2 + 2 * y2 * y2 - 2 * y1 * y2 < 0))
  25. //проверка первого условия
  26. count = (int)(Math.max(a, b) + e) - (int)(Math.min(a, b) - e);
  27. else {
  28. //второе условие
  29. count = (int)(a + e) - (int)(d - e);
  30. count = count + (int)(b + e) - (int)(d - e);
  31. if ((Math.abs(Math.round(d) - d) < e) & (Math.abs(d) > e)) {
  32. //проверка крайнего случая
  33. count--;
  34. }
  35. }
  36. System.out.print(count);
  37. }
  38. }
Success #stdin #stdout 0.07s 2184192KB
stdin
-10 10 -10 10
stdout
28