Cod sursa(job #1448780)

Utilizator sebinechitasebi nechita sebinechita Data 7 iunie 2015 22:28:47
Problema Rubarba Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
ifstream fin("rubarba.in");
ofstream fout("rubarba.out");
#define MAX 100003
#define eps 1e-16
#define PI 3.141592
typedef long double ld;

pair <int, int> a[MAX];
int n;
ld maxx, minx, maxy, miny;

ld f(ld angle)
{
    ld s = sin(angle);
    ld c = cos(angle);
    for(int i = 1 ; i <= n ; i ++)
    {
        ld x = (ld)a[i].first * c - (ld)a[i].second * s;
        ld y = (ld)a[i].first * s + (ld)a[i].second * c;
        if(i == 1)
        {
            maxx = minx = x;
            maxy = miny = y;
        }
        maxx = max(x, maxx);
        minx = min(x, minx);
        maxy = max(y, maxy);
        miny = min(y, miny);
    }
    return (maxx - minx) * (maxy - miny);
}

int main()
{
    int i;
    fin >> n;
    for(i = 1 ; i <= n ; i++)
        fin >> a[i].first >> a[i].second;
    ld st = 0;
    ld dr = PI / 2.0;
    while(dr - st > eps)
    {
        ld mij1 = st + (dr - st) / 3.0;
        ld mij2 = dr - (dr - st) / 3.0;
        if(f(mij1) < f(mij2))
            dr = mij2;
        else
            st = mij1;
    }
    fout << fixed << setprecision(2) << f(st);
}