Cod sursa(job #1723202)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 30 iunie 2016 00:13:39
Problema Rubarba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#define MAXN 100010
#define EPS 1e-17
#define INF 1e9
using namespace std;
struct Point{
    int x;
    int y;
};
Point v[MAXN];
int n;
long double minimum(long double a,long double b){
    if(a<b)
        return a;
    return b;
}
long double maximum(long double a,long double b){
    if(a>b)
        return a;
    return b;
}
long double Compute(long double value){
    int i;
    long double minX=INF,minY=INF,maxX=-INF,maxY=-INF,Sine=sin(value),Cosine=cos(value),x,y;
    for(i=1;i<=n;i++){
        x=v[i].x*Cosine-v[i].y*Sine;
        y=v[i].x*Sine+v[i].y*Cosine;
        minX=min(minX,x);
        minY=min(minY,y);
        maxX=max(maxX,x);
        maxY=max(maxY,y);
    }
    return (maxX-minX)*(maxY-minY);
}
int main(){
    freopen("rubarba.in","r",stdin);
    freopen("rubarba.out","w",stdout);
    int i;
    long double left=0,right=2*atan(1),middle;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d%d",&v[i].x,&v[i].y);
    while(right-left>EPS){
        middle=(left+right)/2.0;
        if(Compute(middle+EPS)<Compute(middle))
            left=middle;
        else
            right=middle;
    }
    printf("%.2Lf",Compute(left));
    return 0;
}