Cod sursa(job #2161838)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 11 martie 2018 21:13:30
Problema Rubarba Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>

#define MaxN 100005
#define INF 2140000000
#define MOD 1000000007
#define eps 1e-12
#define pi 3.1415926535897932384626433832795

using namespace std;

FILE *IN=fopen("rubarba.in","r"),*OUT=fopen("rubarba.out","w");

int N,X,Y;
pair<long double,long double> v[MaxN];
long double calc(long double angle)
{
    long double MaxX=-INF,MaxY=-INF,MinX=INF,MinY=INF,s=sin(angle),c=cos(angle);
    for(int i=1;i<=N;i++)
    {
        long double x=v[i].first*c-v[i].second*s;
        long double y=v[i].first*s+v[i].second*c;
        MinX=min(x,MinX);
        MinY=min(y,MinY);
        MaxX=max(x,MaxX);
        MaxY=max(y,MaxY);
    }
    return (MaxX-MinX)*(MaxY-MinY);
}
int main()
{
    fscanf(IN,"%d",&N);

    for(int i=1;i<=N;i++)
    fscanf(IN,"%d%d",&X,&Y),v[i]={X,Y};

    long double lw=0,hi=pi/2,mid;
    while(hi-lw>eps)
    {
        mid=(lw+hi)/2;
        if(calc(mid)<calc(mid+eps))
            hi=mid;
        else lw=mid;
    }
    long double ans=calc(hi);
    fprintf(OUT,"%.2lf\n",abs(ans));
    return 0;
}