Pagini recente » Cod sursa (job #2445580) | Cod sursa (job #2550607) | Monitorul de evaluare | Cod sursa (job #2315347) | Cod sursa (job #2544170)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aria.in");
ofstream fout("aria.out");
struct point{
double x, y;
int poz;
bool operator<(point b){
return x==b.x?y<b.y:x<b.x;
}
point operator- (point a){
return {x-a.x, y-a.y};
}
};
double cp(point o, point a, point b){
a=a-o, b=b-o;
return a.x*b.y-a.y*b.x;
}
vector<point> hull(vector<point> v){
vector<point> sol;
sort(v.begin(), v.end());
for(int i=0,p=1;i>=0;i+=(p=i==(v.size()-1)?-p:p)){
while(sol.size()>=2&&cp(sol[sol.size()-2], sol[sol.size()-1], v[i])<0) sol.pop_back();
sol.push_back(v[i]);
}
sol.pop_back();
return sol;
}
double getarea(vector<point> v){
double area=0;
for(int i=1;i<v.size();++i){
area+=cp({0, 0}, v[i-1], v[i]);
}
area+=cp({0, 0}, v[v.size()-1], v[0]);
area=abs(area);
area/=2;
return area;
}
int main(){
int n;
fin>>n;
vector<point> v;
for(int i=0;i<n;++i){
point x;
fin>>x.x>>x.y;
v.push_back(x);
}
fout<<fixed<<setprecision(10)<<getarea(v)<<"\n";
return 0;
}