Cod sursa(job #2210107)

Utilizator bebeetarepredescu bebeetare Data 5 iunie 2018 17:26:03
Problema Aria Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("ariapoligonsimplu.in");
ofstream g("ariapoligonsimplu.out");
int n,m,x,y;
struct ceva
{
    int x,y;
}q[102];
int cadran(int x, int y)
{
    if(x>0 && y>=0)
        return 1;
    if(x>=0 && y<0)
        return 4;
    if(y>0 && x<=0)
        return 2;
    return 3;
}
int det(int X1,int Y1,int X2,int Y2,int X3,int Y3)
{
    return (X2-X1)*(Y3-Y1)-(X3-X1)*(Y2-Y1);
}
bool cmp(ceva a,ceva b)
{
    int c1=cadran(a.x,a.y);
    int c2=cadran(b.x,b.y);
        if(c1!=c2)
            return c1<c2;
        else
        {
            int d=det(0,0,a.x,a.y,b.x,b.y);
            if(d!=0)
                return d>0;
            else
                return a.x*a.x+a.y*a.y<b.x*b.x+b.y*b.y;
        }
}
int main()
{
    f>>n;
    int nr=0;
    for(int i=1;i<=n;i++)
    {
        f>>q[i].x>>q[i].y;
        if(q[i].x==0 && q[i].y==0)nr++;
    }
    sort(q+1,q+n+1,cmp);
    reverse(q+1,q+n+1-nr);
    reverse(q+1,q+n+1);
    double s=0;
    for(int i=1;i<=n-1;i++)
    {
        s=s+det(0,0,q[i].x,q[i].y,q[i+1].x,q[i+1].y);
    }
    s=s+det(0,0,q[n].x,q[n].y,q[1].x,q[1].y);
    s=s/2;
    g<<setprecision(10)<<fixed<<s;
    return 0;
}