PKU 3301 Texas Trip

http://poj.org/problem?id=3301
2次元平面上のn個の点を含む最小の正方形の大きさを求めろというような問題。

ある2つの点を回転させる時に角度について3分探索しました。
自信のないアルゴリズム+EPSがでかいのコンボで1WAだったので、気づけなかったらあきらめてました。

double x[30],y[30];
double rx[30],ry[30];

int n;

double sq(double th){
  rep(k,n){
    double tx=x[k],ty=y[k];
    rx[k]=tx*cos(th)+ty*sin(th);
    ry[k]=tx*(-sin(th))+ty*cos(th);
  }
  return max(*max_element(rx,rx+n)-*min_element(rx,rx+n),
             *max_element(ry,ry+n)-*min_element(ry,ry+n));  
}

void solve(){
  cin>>n;
  rep(i,n)cin>>x[i]>>y[i];
  double ans=sq(0);

  rep(i,n){
    rep(j,i){
      double up=-atan2(y[j]-y[i],x[j]-x[i]);
      double low=up-pi/4;
      while(abs(up-low)>EPS){
        double mid1=(up+low*2)/3;
        double mid2=(up*2+low)/3;
        if(sq(mid1)<sq(mid2))up=mid2;
        else low=mid1;
      }
      ans=min(ans,sq(up));
    }
  }
  printf("%.2f\n",ans*ans);
}

main(){
  int T;
  cin>>T;
  while(T--)solve();
}