관리 메뉴

너와 나의 스토리

[BOJ] 2166 다각형의 면적 본문

Algorithm/기하

[BOJ] 2166 다각형의 면적

노는게제일좋아! 2019. 8. 20. 16:01
반응형

문제: https://acmicpc.net/problem/2166

 

 

문제 풀이:

한 점을 잡고 두 점씩 뽑아 (ccw 값/2)를 해준다.

* ccw 값: 두 변을 기준으로한 평행사변형의 넓이

 

빨간 원이 기준

 

 

 

 

 

 

 

 

 

 

 

 

 

소스 코드:

typedef pair<long double,long double> P;
vector<P> v;

long double res;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;
	while (n--) {
		long double x, y;
		cin >> x >> y;
		v.push_back({ x,y });
	}
	long double ax = v[0].first;
	long double ay = v[0].second;

	for (int i = 1; i < v.size()-1; i++) {
		long double ccw = (ax*v[i].second + v[i].first*v[i + 1].second + v[i + 1].first*ay) - (v[i].first*ay + v[i + 1].first*v[i].second + ax * v[i + 1].second);
		res += ccw / 2;
	}
	if (res < 0) res *= -1;
	cout << fixed<<setprecision(1)<< res << '\n';

	return 0;
}

 

반응형

'Algorithm > 기하' 카테고리의 다른 글

[BOJ] 11758 CCW  (0) 2021.01.05
[BOJ] 3878 점 분리  (0) 2019.08.27
[BOJ] 6439 교차  (0) 2019.08.21
[BOJ] 1708 볼록 껍질  (0) 2019.08.20
[BOJ] 2162 선분 그룹  (0) 2019.08.20
Comments