BOJ2166 다각형의 면적

꼭짓점 중 하나를 기준점으로 잡고, 모든 연속한 점쌍에 대해 외적을 구한 후 합하면 됩니다.

외적의 총합이 음수일 수도 있기 때문에 절댓값을 반드시 취해줘야합니다.

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using dot=pair<ll,ll>;

dot operator-(dot a,dot b){
	return {a.first-b.first,a.second-b.second};
}

ll ccw(dot a,dot b,dot c){
	dot x=b-a,y=c-a;
	return x.first*y.second-x.second*y.first;
}

int main(void){
	ios::sync_with_stdio(0);cin.tie(0);
	int n;
	cin>>n;
	vector<dot> v(n);
	dot f;
	ll sum=0;
	for(int i=0;i<n;i++){
		cin>>v[i].first>>v[i].second;
		if(i){
			sum+=ccw(f,v[i-1],v[i]);
		}
		else{
			f=v[i];
		}
	}
	sum=abs(sum);
	printf("%.1f",0.5*sum);
}
yubin.choi's profile image

최유빈(yubin.choi)

2020-05-01 00:00

Read more posts by this author