Cod sursa(job #2274826)

Utilizator buhaidarius@gmail.comBuhai Darius [email protected] Data 2 noiembrie 2018 16:12:37
Problema Aria Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
//
//  main.cpp
//  Aria Poligon
//
//  Created by Darius Buhai on 27/10/2018.
//  Copyright © 2018 Darius Buhai. All rights reserved.
//

#include <iostream>
#include <fstream>

#define MAXL 1000002

using namespace std;

ifstream fin("aria.in");
ofstream fout("aria.out");

int n;
double s;
double maxx, minx = MAXL, maxy, miny = MAXL;

struct point{
    double x = MAXL, y = MAXL;
};

point reference = {MAXL, MAXL};
point a[MAXL];

double det(point a,point b, point c = reference)
{
    double s = (a.x*b.y + b.x*c.y + a.y*c.x) - (c.x*b.y + a.x*c.y + b.x*a.y);
    return s<0 ? -s : s;
}

int main() {
    fin>>n;
    for(int i=0;i<n;i++){
        fin>>a[i].x>>a[i].y;
        if(a[i].x>maxx)
            maxx = a[i].x;
        if(a[i].y>maxy)
            maxy = a[i].y;
        if(a[i].x<minx)
            minx = a[i].x;
        if(a[i].y<miny)
            miny = a[i].y;
    }
    reference.x = (maxx+maxy)/2;
    reference.y = miny-1;
    point lastup = reference, lastdown = reference;
    for(int i=0;i<n;i++){
        if(a[i].y>(miny+maxy)/2)
        {
            if(lastup.x!=MAXL)
                s += det(lastup, a[i]);
            lastup = a[i];
        }
        else
        {
            if(lastdown.x!=MAXL)
                s -= det(lastdown, a[i]);
            lastdown = a[i];
        }
    }
    double rounded = (int)(s * 100000.0)/100000.0;
    fout<<rounded;
    return 0;
}