Pagini recente » Istoria paginii utilizator/ionutzz | Istoria paginii utilizator/sonea_andreea_323cb | Istoria paginii utilizator/maraam | Profil GeorgeGradinariu | Cod sursa (job #1397029)
#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;
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);
}