Pagini recente » Rezultatele filtrării | Cod sursa (job #1499978) | cni_preoji | Cod sursa (job #916677) | Cod sursa (job #2161896)
#include <bits/stdc++.h>
#define MaxN 100005
#define INF 2140000000
#define MOD 1000000007
#define eps 4e-15
#define pi 1.5707963267948966192313216916398
using namespace std;
FILE *IN=fopen("rubarba.in","r"),*OUT=fopen("rubarba.out","w");
int N,X,Y;
pair<long double,long double>v[MaxN];
long double calc(long double angle)
{
long double MaxX=-INF,MaxY=-INF,MinX=INF,MinY=INF;
for(int i=1;i<=N;i++)
{
long double x=v[i].first*cos(angle)-v[i].second*sin(angle);
long double y=v[i].first*sin(angle)+v[i].second*cos(angle);
MinX=min(x,MinX);
MinY=min(y,MinY);
MaxX=max(x,MaxX);
MaxY=max(y,MaxY);
}
return (MaxX-MinX)*(MaxY-MinY);
}
int main()
{
fscanf(IN,"%d",&N);
for(int i=1;i<=N;i++)
fscanf(IN,"%d%d",&X,&Y),v[i]={X,Y};
long double lw=0,hi=pi,mid;
while(eps<=hi-lw)
{
mid=lw+(hi-lw)/2;
if(calc(mid)>=calc(mid+eps))
lw=mid;
else hi=mid;
}
fprintf(OUT,"%.2lf\n",calc(mid));
return 0;
}