Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Bài toán khởi tạo : 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.

Có 2 cách đọc: ACB :tam giác thuận

ABC:tam giác nghịch

Dùng công thức bù trừ , ta có

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

+S>0 thì tam giác thuận

S>0 thì tam giác ngược

+Nên tính 2S để đảm bảo số nguyên nếu ko cần in chính xác S

+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.

Coi mỗi cây là 1 điểm, mỗi phần là 1 nmp.

Tư tưởng: chọn 2 điểm bất kì, kiểm tra xem đó có phải hàng rào ko?

Cải tiến:Áp dụng thuật tính diện tích tam giác

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

Trên hình, ta cần chọn điểm 5, điểm chính giữa

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).

Kết quả là A[N/2] sau khi sort.

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.

A có xmin, ymin; B có xmax,ymax.

Bao lồi bao gồm 2 đường gấp khúc từ A đến B

+1 đường phía trên.

+1 đường phía dướ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.

Nhận xét: Cả 2 đều có tọa độ các đỉnh có X tăng dần

=>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.

*) Kiểm tra 1 đa giác là đa giác lồ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.

Tương tự, ngược lại ta làm với phần dưới.

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.

You might also like