Cod sursa(job #3327470)

Utilizator ioanabaduIoana Badu ioanabadu Data 4 decembrie 2025 09:09:21
Problema Aria Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <iomanip>
#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  << setprecision(5)<< fixed << area;

    return 0;
}