Cod sursa(job #2210005)

Utilizator bebeetarepredescu bebeetare Data 5 iunie 2018 13:55:29
Problema Aria Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("punctinpoligonsimplu.in");
ofstream g("punctinpoligonsimplu.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;
    for(int i=1;i<=n;i++)
    {
        f>>q[i].x>>q[i].y;
    }
    sort(q+1,q+n+1,cmp);
    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/2;
    g<<setprecision(1)<<fixed<<s;
    return 0;
}