Cod sursa(job #2287353)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 21 noiembrie 2018 19:51:56
Problema Rubarba Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
#include<iomanip>
#include<math.h>
#define x first
#define y second
#define EPS 3e-15
using namespace std;
ifstream fi("rubarba.in");
ofstream fo("rubarba.out");
pair<int,int> A[100005];
int n,i;
long double st,dr,mij;

long double arie(long double alpha)
{
    int i;
    long double x,y,xmx,xmn,ymx,ymn;
    xmx=ymx=-1000000000.0;
    xmn=ymn=1000000000.0;
    for(i=1; i<=n; i++)
    {
        x=1.0*A[i].x*cos(alpha)-1.0*A[i].y*sin(alpha);
        y=1.0*A[i].x*sin(alpha)+1.0*A[i].y*cos(alpha);
        xmx=max(xmx,x);
        ymx=max(ymx,y);
        xmn=min(xmn,x);
        ymn=min(ymn,y);
    }
    return ((xmx-xmn)*(ymx-ymn));
}

int main()
{
    fi>>n;
    for(i=1; i<=n; i++)
        fi>>A[i].x>>A[i].y;
    dr=1.5707963267948966192313216916398;
    st=0;
    while(dr-st>EPS)
    {
        mij=(st+dr)/2;
        if(arie(mij-EPS)>arie(mij))
            st=mij;
        else
            dr=mij;
    }
    fo<<setprecision(2)<<fixed<<arie(mij)<<"\n";
    fi.close();
    fo.close();
    return 0;
}