Pagini recente » Cod sursa (job #2489455) | Cod sursa (job #1367640) | Statistici peterec (wilburtt41) | Statistici bascomb (aeniahq27) | Cod sursa (job #3327469)
#include <iostream>
#include <algorithm>
#include <fstream>
#define N_MAX 150005
using namespace std;
ifstream in("aria.in");
ofstream out("aria.out");
struct point {double x, y;};
point points[N_MAX];
int startingPoint (int n){
int idx = 1;
for (int i=2; i<=n; ++i){
if (points[i].x < points[idx].x || (points[i].x == points[idx].x && points[i].y < points[idx].y))
idx = i;
}
return idx;
}
double orientation (point a, point b, point c){
return (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);
}
bool cmp (point a, point b){
return orientation(points[1], a, b) < 0; // ordine trigonometrica
}
int main (){
int n;
in >> n;
for (int i = 1; i <= n; i++)
in >> points[i].x >> points[i].y;
swap (points[1], points[startingPoint(n)]);
points[n+1] = points[1];
sort (points + 2, points + n, cmp);
long double area = 0.0;
for (int i = 1; i <= n; i++)
area += (points[i].x * points[i+1].y - points[i+1].x * points[i].y); // aria calculata cu determinant
if (area < 0)
area = -area;
area /= 2.0;
out << area;
return 0;
}