Hướng dẫn giải của Trái phải
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Chọn hai vector bất kỳ (mình chọn ~\vec{AB}~ và ~\vec{AC}~).
Tính tích có hướng (cross product) của hai vector đó.
Nếu kết quả ra âm, thì nó nằm bên phải. Nếu ra dương, thì nó nằm bên trái, và cuối cùng, ~0~ nếu nằm trên đường thẳng (colinear).
Lời giải tham khảo
- Tác giả
#include <iostream>
struct Vect2d {
long int x;
long int y;
};
long int calc(Vect2d v1, Vect2d v2) {
return v1.x * v2.y - v2.x * v1.y;
}
int main() {
long int x1, y1, x2, y2, x3, y3;
std::cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
Vect2d v1, v2;
// vector AB
v1.x = x2 - x1;
v1.y = y2 - y1;
// vector AC
v2.x = x3 - x1;
v2.y = y3 - y1;
long int result = calc(v1, v2);
int ON_THE_LINE = 0, LEFT = -1, RIGHT = 1;
if (result == 0)
std::cout << ON_THE_LINE;
else if (result > 0)
std::cout << LEFT;
else
std::cout << RIGHT;
return 0;
}
Bình luận
Sao lại là tích có hướng, tích vô hướng chứ ad