Cod sursa(job #1586940)

Utilizator Mihai9Oniga Mihai Mihai9 Data 1 februarie 2016 19:03:35
Problema Zombie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#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;
}