diff --git a/md/0035.md b/md/0035.md new file mode 100644 index 0000000..d820c04 --- /dev/null +++ b/md/0035.md @@ -0,0 +1,37 @@ +ในข้อนี้ เรื่องจากเรามีจุดทั้งหมด $N \le 100$ จุด เราสามารถสร้างสามเหลี่ยมได้ทั้งหมด $\binom{N}{3}$ วิธี และการลองสร้างสามเหลี่ยมทุกวิธีนั้นใช้เวลาไม่นานเกินไป (ใช้เวลา $\mathcal O (N^3)$) + +เราสร้างฟังก์ชั่นหาพื้นที่สามเหลี่ยมจากจุดสามจุดได้ โดยใช้สูตรที่ให้มาในโจทย์ และวนหาจุดสามจุดทุกรูปแบบโดยการใช้ for-loop สามชั้น สังเกตว่าเราสามารถวน index $i, j, k$ เฉพาะ $i < j < k$ ได้เนื่องจากการสลับที่ของ $i, j, k$ ไม่ส่งผลต่อพื้นที่ + +```cpp +#include +using namespace std; + +struct Point { + int x, y; +} points[100]; + +double triangle_area (Point a, Point b, Point c) { + return abs(a.x * b.y + b.x * c.y + c.x * a.y - a.y * b.x - b.y * c.x - c.y * a.x) / 2.0; +} + +int main () { + int n; cin >> n; + for (int i = 0; i < n; i++) { + cin >> points[i].x >> points[i].y; + } + + double max_area = 0; + + for (int i = 0; i < n; i++) { + for (int j = i+1; j < n; j++) { + for (int k = j+1; k < n; k++) { + max_area = max(max_area, triangle_area(points[i], points[j], points[k])); + } + } + } + + cout << fixed << setprecision(3) << max_area; + + return 0; +} +```