fork download
  1. n = int(input())
  2. buildings = [tuple(map(int, input().split())) for _ in range(n)]
  3.  
  4. x_min = float('inf')
  5. y_min = float('inf')
  6. x_max = float('-inf')
  7. y_max = float('-inf')
  8.  
  9. second_x_min = float('inf')
  10. second_y_min = float('inf')
  11. second_x_max = float('-inf')
  12. second_y_max = float('-inf')
  13.  
  14. x_min_count = y_min_count = x_max_count = y_max_count = 0
  15.  
  16. for x1, y1, x2, y2 in buildings:
  17. if x1 < x_min:
  18. second_x_min = x_min
  19. x_min = x1
  20. x_min_count = 1
  21. elif x1 == x_min:
  22. x_min_count += 1
  23. elif x1 < second_x_min:
  24. second_x_min = x1
  25.  
  26. if y1 < y_min:
  27. second_y_min = y_min
  28. y_min = y1
  29. y_min_count = 1
  30. elif y1 == y_min:
  31. y_min_count += 1
  32. elif y1 < second_y_min:
  33. second_y_min = y1
  34.  
  35. if x2 > x_max:
  36. second_x_max = x_max
  37. x_max = x2
  38. x_max_count = 1
  39. elif x2 == x_max:
  40. x_max_count += 1
  41. elif x2 > second_x_max:
  42. second_x_max = x2
  43.  
  44. if y2 > y_max:
  45. second_y_max = y_max
  46. y_max = y2
  47. y_max_count = 1
  48. elif y2 == y_max:
  49. y_max_count += 1
  50. elif y2 > second_y_max:
  51. second_y_max = y2
  52.  
  53. perimeter_all = 2 * ((x_max - x_min) + (y_max - y_min))
  54.  
  55. min_perimeter_after_removal = float('inf')
  56.  
  57. for x1, y1, x2, y2 in buildings:
  58. if x1 == x_min:
  59. if x_min_count == 1:
  60. new_x_min = second_x_min
  61. else:
  62. new_x_min = x_min
  63. else:
  64. new_x_min = x_min
  65.  
  66. if y1 == y_min:
  67. if y_min_count == 1:
  68. new_y_min = second_y_min
  69. else:
  70. new_y_min = y_min
  71. else:
  72. new_y_min = y_min
  73.  
  74. if x2 == x_max:
  75. if x_max_count == 1:
  76. new_x_max = second_x_max
  77. else:
  78. new_x_max = x_max
  79. else:
  80. new_x_max = x_max
  81.  
  82. if y2 == y_max:
  83. if y_max_count == 1:
  84. new_y_max = second_y_max
  85. else:
  86. new_y_max = y_max
  87. else:
  88. new_y_max = y_max
  89.  
  90. perimeter_after_removal = 2 * ((new_x_max - new_x_min) + (new_y_max - new_y_min))
  91. min_perimeter_after_removal = min(min_perimeter_after_removal, perimeter_after_removal)
  92.  
  93. print(perimeter_all)
  94. print(min_perimeter_after_removal if n > 1 else 0)
Success #stdin #stdout 0.12s 14128KB
stdin
3
1 1 3 8
1 5 6 7
2 1 7 3
stdout
26
24