BOJ 2166: 다각형의 면적

https://www.acmicpc.net/problem/2166

  • 3월동안 210문제 풀기 (1/210)
  • 지난달에 총 76문제 품. 2월 10일경부터 시작했으니까.. 이번달은 더 열심히해보자!
  • 이월된 110문제까지 해서 210문제 목표. 팍 줄여보자
  • 다각형의 면적 구한는 기하문제. 신발끈 공식을 써도 되지만, 나는 정적분의 값을 누적하는 식으로 풀었다.
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
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
struct Point {
  LL x, y;
};

double areaUnder(Point& p1, Point& p2) {
  LL xDiff = (p2.x - p1.x);
  LL ySum = (p2.y + p1.y);
  return xDiff * ySum / 2.0;
}

int main() {
  ios::sync_with_stdio(false);
  LL N;
  cin >> N;
  vector<Point> arr(N);
  for(LL i = 0; i < N; i++) {
    cin >> arr[i].x >> arr[i].y;
    arr[i].x += 100001;
    arr[i].y += 100001;
  }

  double ans = 0;
  for(LL i = 0; i < N; i++)
    ans += areaUnder(arr[i], arr[(i+1)%N]);
  printf("%.1lf", abs(ans));
}