https://www.acmicpc.net/problem/1198
제목 : 삼각형으로 자르기
난이도 : Silver II
주어진 점들 중에 3개를 고르고, 그 중 제일 넓이가 큰 값을 구하면 된다.
좌표 평면에서 N개의 점으로 이루어진 다각형의 넓이를 구하는 신발끈 공식을 이용하면 된다.
그리고 넓이는 무조건 2로 나누어져 소수가 0 아니면 0.5로만 이루어져 있다.
2로 나누어 떨어지지 않으면 ".5" 를 붙이면 된다.
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int getarea(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
int area;
auto [a1, a2] = a;
auto [b1, b2] = b;
auto [c1, c2] = c;
int tmp1 = a1 * b2 + b1 * c2 + c1 * a2;
int tmp2 = a2 * b1 + b2 * c1 + c2 * a1;
area = abs(tmp1 - tmp2);
return area;
}
int main()
{
vector<pair<int, int>> map;
int N;
int x, y, maxsize = -999;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> x >> y;
map.push_back({ x, y });
}
for (int i = 0; i < map.size() - 2; i++) {
for (int j = i + 1; j < map.size() - 1; j++) {
for (int k = j + 1; k < map.size(); k++) {
maxsize = max(maxsize, getarea(map[i], map[j], map[k]));
}
}
}
if (maxsize % 2 == 0) printf("%d.0",maxsize / 2);
else printf("%d.5", (maxsize - 1) / 2);
}
