Professional Documents
Culture Documents
Tính diện tích tam giác
Tính diện tích tam giác
Đề bài: Cho 3 điểm A,B,C của tam giác ABC có tọa độ A(x1,y1), B(x2,y2), C(x3,y3). Tọa độ nguyên. Tính
diện tích tam giác ABC.
2S=[(x2-x1)(y2+y1)+(x1-x3)(y1+y3)-(x1-x3)(y2+3)]
= [(x2-x1)(y2+y1)+(x1-x3)(y1+y3)+(x3-x1)(y2+3)]
S chính là diện tích đại số của tam giác ABC, do đó S có thể âm.
Từ đó ta suy ra
+Ta thấy biểu thức trên là hoán vị giữa các cặp tọa độ
Bài toán chính: Apples
VÌ là hàng rào chia đôi các điểm nên nó sẽ chia khu vườn làm 2 phần có số lượng điểm như nhau.
Tư tưởng: chọn 2 điểm bất kì, kiểm tra xem đó có phải hàng rào ko?
Chọn 1 điểm ở góc(để đảm bảo điểm này ko nằm giữa 2 điểm bất kì trong các điểm còn lại) khi đó sẽ ko
có tam giác nào có góc > 180.
Chọn ngẫu nhiên 4 đỉnh ngoài cùng của tứ giác làm tâm, minh họa vs đỉnh dưới trái.
1)Tìm điểm dưới trái A0(xo;yo) của n điểm thỏa mãn yo min và xo min.
Điểm A0 sẽ tạo vs N-1 còn lại N-1 đoạn thẳng, và đường đoạn chính giữa sẽ chia các điểm thành 2 nmp
bằng nhau
Do đó ta cần sort các điểm (ngoại trừ A0) theo chiều ngược kim đồng hồ(hoặc xuôi) để chọn điểm ở
giữa. Với hai điểm I và J, điểm I nằm trước J nếu tam giác A0IJ có diện tích< 0(tam giác ngược).
Lưu ý: giá trị các tọa đó có trị <= 1e6 nên S có thể lớn, nên để long long với các giá trị tọa độ là long long.
Đồng thời vì yêu cầu in ra vị trí nên ta cần lưu lại giá trị vị trí ban đầu của các tọa độ, ưu tiên dùng Pair
hoặc Struct.
Sol bài Bao lồi:
Để đa giác có diện tích nhỏ nhất bao trùm tất cả các điểm thì đa giác đó đi qua các điểm thuộc tập đã
cho.
Nhận xét:Điểm A và B là 2 điểm trái dưới và phải trên, nên 2 điểm này chắc chắn là 2 điểm thuộc bao
lồi.
Với I là 1 đỉnh thuộc đường trên, ta có S(ABI)<0(tam giác ngược); và ngược lại với I thuộc đường dưới, S
sẽ lớn hơn 0. Do đó ta dễ dàng chia tập điểm làm 2 phần, 1 phần là "ứng cử" cho đường trên, 1 cho
đường dưới.
=>Sort theo X. Trong trường hợp Xi=Xj, vs đường trên, ưu tiên điểm có Y nhỏ hơn đúng trc, ngược lại
với đường dưới.
Nhận xét: Tương tự bài 1, chọn 1 điểm là tâm, ta sẽ kiểm tra diện tích của tam giác tạo bởi tâm và 2
điểm kề nhau, nếu tất cả diện tích đó cùng dấu, thì đó là tam giác lồi.
Từ nhận xét đó, ta để loang từ đỉnh A tới đỉnh B, với tam giác tạo bởi đỉnh đang xét và 2 đỉnh gần nhất
có diện tích lớn hơn 0(đối với đường trên) , thì tính tới đỉnh đảng xét, đây là 1 đường thẳng "lồi" thỏa
mãn, nếu ko, đỉnh gần nhất là ko phù hợp(vì nó "lõm" so với 2 đỉnh kề là đỉnh trước đó và đỉnh đang xét,
so với phần trên). Nếu đỉnh đó thỏa mãn, hoặc chỉ còn 1 đỉnh A, ta sẽ tạm thời công nhận đó là 1 đỉnh
thuộc bao lồi, thêm vào để tiếp tục loang, nếu ko ta bỏ đỉnh gần nhất, tiếp tục kiểm tra lại. Việc kiểm tra
sẽ dừng, và chắc chắn dừng khi ta loang tới B.
Ta cần xử lí trường hợp 3 điểm thẳng hàng, khi đó ta ko tính điểm ở giữa(kiểm tra với S = 0).
Sau khi xây dựng dc 2 mảng chứa 2 phần trên và dưới của bao lồi, ta sẽ hợp bao lồi.
Với yêu cầu tính diện tích bao lồi, ta sẽ tính tổng các tam giác tạo thành nó theo thứ tự vòng tròn, với 1
đỉnh cố định, sử dụng công thức diện tích tam giác ở trên.
Việc còn lại là in ra các đỉnh theo thứ tự ngược chiều kim đồng hồ, từ đỉnh trái dưới. Ở đây ta Sort tương
tự bài 1.