Pagini recente » Cod sursa (job #129740) | Cod sursa (job #2003558) | Istoria paginii utilizator/romanache | Cod sursa (job #656579) | Cod sursa (job #1586940)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rubarba.in");
ofstream fout("rubarba.out");
struct point{int x,y;};
point p[100001];
int n;
double area(double phi) {
double minX = 1e9, minY = 1e9,maxX = -1e9, maxY = -1e9,cs = cos(phi),sn = sin(phi);
for (int i=0;i<n;i++)
{
double X=(long double)p[i].x*cs-p[i].y*sn,Y=(long double)p[i].x*sn+p[i].y*cs;
minX=min(minX, X);
maxX=max(maxX, X);
minY=min(minY, Y);
maxY=max(maxY, Y);
}
return (maxX-minX)*(maxY-minY);
}
double ternary_search(double l, double r){
if(r-l<1e-14){return l;}
double m1=l+(r-l)/3,m2=r-(r-l)/3;
if (area(m1)<area(m2)){return ternary_search(l, m2);}
else{return ternary_search(m1, r);}
}
int main() {
fin>>n;
for (int i=0;i<n;i++){fin>>p[i].x>>p[i].y;}
fout<<fixed<<setprecision(2)<<area(ternary_search(0, M_PI_2));
return 0;
}