Cod sursa(job #1397047)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 23 martie 2015 11:14:54
Problema Aria Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n;
struct str
{
       double x;
       double y;
       double n1;
       double n2;
}a[100001];
double calcarie(double x1,double y1,double x2,double y2,double x3,double y3)
{
       double arie=double((double)x1*(y2-y3)+(double)x2*(y3-y1)+(double)x3*(y1-y2));
       arie=(double)arie/2;
       if(arie<0) arie=-arie;
       return arie;
}
int comp(str a,str b)
{
    return a.n1*b.n2<=a.n2*b.n1;
}
int main()
{
    freopen ("aria.in","r",stdin);
    freopen ("aria.out","w",stdout);
    scanf("%d",&n);
    int ind;
    double p1=1000000,p2=1000000;
    for(int i=1;i<=n;i++)
    {
            scanf("%lf%lf",&a[i].x,&a[i].y);
            if(p1>a[i].x)
            {
                         p1=a[i].x;
                         p2=a[i].y;
                         ind=i;
            }
            else if(p1==a[i].x&&p2>a[i].y)
            {
                 p2=a[i].y;
                 ind=i;
            }
    }
    swap(a[1],a[ind]);
    for(int i=2;i<=n;i++)
    {
            a[i].n1=a[i].y-a[ind].y;
            a[i].n2=a[i].x-a[ind].x;
    }
    sort(a+2,a+n+1,comp);
    double arie=0;
    for(int i=3;i<=n;i++)
    {
            arie+=calcarie(a[1].x,a[1].y,a[i-1].x,a[i-1].y,a[i].x,a[i].y);
    }
    printf("%.5lf\n",arie);
}