canuc80k6901·2/50

Hai Đoạn Có Gặp Nhau?

Nộp bài trên LQDOJ

Bài 69 · Geometry

Mỗi bộ kiểm tra cho hai đoạn thẳng đóng và . Hãy xác định chúng có ít nhất một điểm chung hay không.

Một giao điểm tại đầu mút cũng được tính. Nếu hai đoạn thẳng hàng, chúng giao nhau khi phần của chúng trên đường thẳng chồng lấn ít nhất một điểm.

Input

  • Dòng đầu chứa số nguyên - số bộ kiểm tra.
  • Mỗi dòng tiếp theo chứa tám số nguyên .

Output

  • Với mỗi bộ kiểm tra, in YES nếu hai đoạn có điểm chung, ngược lại in NO.

Constraints

  • .
  • Mọi tọa độ nằm trong .
  • và .

Scoring

  • Subtask ( điểm): và trị tuyệt đối tọa độ không quá .
  • Subtask ( điểm): không có giới hạn bổ sung.

Example

Test 1

Input

5
0 0 4 4 0 4 4 0
0 0 4 0 4 0 7 3
0 0 6 0 2 0 8 0
0 0 2 0 3 0 5 0
-2 -2 2 2 0 0 0 5

Output

YES
YES
YES
NO
YES

Giải thích: Hai đoạn đầu tiên lần lượt cắt trong và chạm tại đầu mút; cặp thứ ba chồng lấn trên cùng đường thẳng. Cặp thứ tư tách rời, còn cặp cuối có đầu mút của đoạn đứng nằm trên đoạn chéo.

Lời giải tóm tắt
  • Ý tưởng: Gọi là tích có hướng của và . Khi hai điểm nằm nghiêm ngặt ở hai phía của đường thẳng , đồng thời nằm ở hai phía của , hai đoạn cắt nhau trong.
  • Ý tưởng: Trường hợp tích bằng cần xử lý riêng: điểm thẳng hàng chỉ thuộc đoạn khi cả hai tọa độ của nó nằm trong hộp bao đóng của hai đầu mút. Kiểm tra bốn khả năng một đầu mút nằm trên đoạn kia trước khi xét giao cắt nghiêm ngặt.
  • Ý tưởng: Mỗi bộ tốn , tổng ; dùng số nguyên 128 bit cho định thức.