Cod sursa(job #2957993)

Utilizator vladburacBurac Vlad vladburac Data 24 decembrie 2022 01:10:28
Problema Rubarba Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5;
const double EPS = 1e-9;

ifstream fin( "rubarba.in" );
ofstream fout( "rubarba.out" );

struct Point{
  int x;
  int y;
};
Point v[NMAX];
int n;

double aria( double angle ) {
  int i;
  double xn, yn, xmax, xmin, ymax, ymin;
  xmax = ymax = -1e9;
  xmin = ymin = 1e9;
  for( i = 0; i < n; i++ ) {
    xn = v[i].x * cos( angle ) - v[i].y * sin( angle );
    yn = v[i].x * sin( angle ) + v[i].y * cos( angle );
    xmax = max( xmax, xn );
    xmin = min( xmin, xn );
    ymax = max( ymax, yn );
    ymin = min( ymin, yn );
  }
  return ( xmax - xmin ) * ( ymax - ymin );
}
int main() {
  int i;
  double st, dr, mid, pi;
  fin >> n;
  for( i = 0; i < n; i++ ) {
    fin >> v[i].x >> v[i].y;
  }
  pi = 2 * acos( 0.0 );
  st = 0;
  dr = pi / 2;
  while( dr - st > EPS ) {
    mid = ( st + dr ) / 2;
    if( aria( mid ) < aria( mid + EPS ) )
      dr = mid;
    else
      st = mid;
  }
  fout << setprecision( 2 ) << fixed;
  fout << aria( ( st + dr ) / 2 );
  return 0;
}