Cod sursa(job #2957997)

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

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

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

long double aria( long double angle ) {
  int i;
  long double xn, yn, xmax, xmin, ymax, ymin;
  xmax = ymax = -1e18;
  xmin = ymin = 1e18;
  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;
  long 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 ) )
      st = mid;
    else
      dr = mid;
  }
  fout << setprecision( 2 ) << fixed;
  fout << aria( ( st + dr ) / 2 );
  return 0;
}