꼭짓점 중 하나를 기준점으로 잡고, 모든 연속한 점쌍에 대해 외적을 구한 후 합하면 됩니다.
외적의 총합이 음수일 수도 있기 때문에 절댓값을 반드시 취해줘야합니다.
#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);
}