2166 areaOfPolygon
알고리즘(기하학)
1
1. 사선정리 사용
구현법
1
2
1. 최대 4000000000000이 나올 수 있으므로, int대신 long long, float은 쓰지말고 double로 통일 시킨다.
2. double은 최대 15자리수를 표현가능하므로, 위 값도 충분히 들어갈 수 있다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstdio>
#include <cmath>
#define MAX_POINT 10000
using namespace std;
typedef struct Point {
long long x;
long long y;
} Point;
Point point[MAX_POINT];
int numOfPoint;
double getAreaOfPolygon();
int main() {
cin >> numOfPoint;
for (int i = 0; i < numOfPoint; i++)
cin >> point[i].x >> point[i].y;
printf("%.1f", getAreaOfPolygon());
}
double getAreaOfPolygon() {
double area = 0;
for (int i = 0; i < numOfPoint - 1; i++)
area += ((point[i].x * point[i + 1].y) - (point[i + 1].x * point[i].y));
area += (point[numOfPoint - 1].x * point[0].y) - (point[0].x * point[numOfPoint - 1].y);
area = area < 0 ? (-1) * area : area;
return area /= 2;
}