Pagini recente » Cod sursa (job #2158828) | Cod sursa (job #1178855) | Cod sursa (job #1222265) | Cod sursa (job #1951841) | Cod sursa (job #2403373)
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const double eps=1e-12;
const double PI = 2.0 * acos(0.0);
struct POINT
{
int x,y;
};
vector<POINT>v;
double ans(double ang)
{
double sinus=sin(ang);
double cosinus=cos(ang);
double xprim,yprim,xmin,ymin,xmax,ymax;
xmin=xmax=1.0*v[0].x*cosinus+v[0].y*sinus;
ymin=ymax=1.0*(-1.0)*(v[0].x*sinus)+v[0].y*cosinus;
for(register int i=1;i<v.size();i++)
{
xprim=1.0*v[i].x*cosinus+v[i].y*sinus;
yprim=1.0*(-1.0)*(v[i].x*sinus)+v[i].y*cosinus;
xmin=min(xmin,xprim);
ymin=min(ymin,yprim);
xmax=max(xmax,xprim);
ymax=max(ymax,yprim);
}
return 1.0*(ymax-ymin)*(xmax-xmin);
}
int main()
{
freopen("rubarba.in","r",stdin);
freopen("rubarba.out","w",stdout);
int n,x,y,xmin,xmax,ymin,ymax;
POINT temp;
scanf("%d",&n);
for(register int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
temp.x=x;
temp.y=y;
v.push_back(temp);
xmin=min(xmin,x);
ymin=min(ymin,y);
xmax=max(xmax,x);
ymax=max(ymax,y);
}
double st=0,dr=2.0*PI,med,arietrecuta=1.0*(xmax-xmin)*(ymax-ymin),arie;
while(dr-st>=eps)
{
med=(st+dr)/ 2.0;
arie=ans(med);
if(arie-ans(med+eps)<eps) dr=med-eps;
else st=med+eps;
}
med=(st+dr)/2.0;
printf("%lf",min(ans(med),min(ans(med-eps),ans(med+eps))));
return 0;
}