Kiểm tra ba điểm thẳng hàng
Ba điểm thẳng hàng khi diện tích tam giác tạo bởi chúng bằng không. Với toạ độ nguyên, điều
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: cpp-basics, conditionals.
Nội dung đề bài
Mô tả bài toán
Ba điểm thẳng hàng khi diện tích tam giác tạo bởi chúng bằng không. Với toạ độ nguyên, điều đó tương đương tích có hướng của hai vector nối từ một đỉnh bằng 0. Đây là phép kiểm tra nền tảng của hình học tính toán: dựng đường thẳng, kiểm tra điểm nằm trên đoạn, xét giao nhau của hai đoạn đều dựa vào nó.
Yêu cầu
Cho ba điểm A(x1, y1), B(x2, y2), C(x3, y3). Hãy kiểm tra xem ba điểm có thẳng hàng hay không, tức là tích có hướng
cross = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)có bằng 0 hay không. Nếu cross == 0 in YES, ngược lại in NO.
Quy ước nộp bài
Nộp chương trình solution.cpp đọc dữ liệu từ stdin và in kết quả ra stdout. Chỉ in đúng một dòng YES hoặc NO (chữ in hoa), không in thêm gì khác.
Input
- Một dòng duy nhất gồm sáu số nguyên x1 y1 x2 y2 x3 y3
(-1000 <= xi, yi <= 1000), cách nhau bởi dấu cách.
Output
In ra một dòng duy nhất: YES nếu ba điểm thẳng hàng, NO nếu không. Hai xâu in bằng chữ in hoa, không in thêm gì khác.
Ràng buộc
- Toạ độ nguyên, |xi|, |yi| <= 1000, nên cross có độ lớn dưới 8 * 10^6 và nằm gọn
trong kiểu int.
- Các điểm có thể trùng nhau; hai điểm trùng nhau luôn thẳng hàng với điểm còn lại.
- Thời gian cho mỗi bộ dữ liệu là 1 giây.
Ví dụ 1
Input
0 0 1 1 2 2
Output
YES
Ví dụ 2
Input
0 0 1 0 0 1
Output
NO
Giải thích
Với dữ liệu vào:
ta có cross = (1 - 0) * (2 - 0) - (1 - 0) * (2 - 0) = 2 - 2 = 0, nên kết quả là:
Với dữ liệu vào:
thì cross = (1) * (1) - (0) * (0) = 1, khác 0, nên kết quả là NO.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
