Cod sursa(job #1157144)

Utilizator span7aRazvan span7a Data 28 martie 2014 11:54:31
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#define M -2000000000
using namespace std;
FILE *f=fopen("teren2.in","r");
FILE *g=fopen("teren2.out","w");
struct coord
{
  int x,y;
};
coord L[1000001];
double s,arie1,arie2,arie3,arie4,ariemax=M,sumaux;
int n,d;
double det(coord a,int x2,int y2,coord c)
{
    return abs(  (a.x-c.x)*(y2-c.y)-(a.y-c.y)*(x2-c.x)   ) ;
}
void solve()
{
    int i;
    for(i=1;i<=n;i++)
    {
        sumaux=s-0.5*det(L[i-1],L[i].x,L[i].y,L[i+1]);
        arie1=sumaux+0.5*det(L[i-1],L[i].x+d,L[i].y,L[i+1]);
        arie2=sumaux+0.5*det(L[i-1],L[i].x-d,L[i].y,L[i+1]);
        arie3=sumaux+0.5*det(L[i-1],L[i].x,L[i].y+d,L[i+1]);
        arie4=sumaux+0.5*det(L[i-1],L[i].x,L[i].y-d,L[i+1]);
        ariemax=max(ariemax,max(arie1,max(arie2,max(arie3,arie4))));

    }
}
int main()
{
   int i;
   fscanf(f,"%d%d",&n,&d);
   for(i=1;i<=n;i++)
   {
       fscanf(f,"%d%d",&L[i].x,&L[i].y);
   }
   L[0]=L[n];
   L[n+1]=L[1];
   for(i=1;i<=n;i++)
      s=s+0.5*(L[i].x*L[i+1].y-L[i+1].x*L[i].y);
    s=abs(s);
    solve();
    fprintf(g,"%.6lf",ariemax);
    return 0;
}