三分

来源:互联网 发布:慧思达教育软件怎么样 编辑:程序博客网 时间:2024/04/28 13:18
#include<iostream>#include<cmath>#define EPS 1e-9int cas,n;int x[1000],y[1000];using namespace std;double calc(double d){ int i,j; double dis1,dis2,dis; dis = 0.0; for(i=1;i<n;i++) {  for(j=i+1;j<=n;j++)  {   dis1 = fabs(cos(d)*(y[i]-y[j])-sin(d)*(x[i]-x[j]));   //将一条线段在旋转坐标时沿X轴的长   dis2 = fabs(sin(d)*(y[i]-y[j])+cos(d)*(x[i]-x[j]));    // 将一条线段在旋转坐标时沿y轴的长   if(dis<dis1)    dis = dis1;   if(dis < dis2)    dis = dis2;  } } return (dis*dis);}int main(){ double l,r,mid,midmid; double s1,s2; cin>>cas; while(cas--) {  cin>>n;  for(int i=1;i<=n;i++)   cin>>x[i]>>y[i];  l = 0.0;  r = acos(-1.0);  while(r-l >= EPS)  {   mid = (l+r)/2;      midmid = (mid+r)/2;   s1 = calc(mid);   s2 = calc(midmid);   if(s1<s2)    r = midmid;   else    l = mid;  }  printf("%0.2lf\n",s1<s2?s1:s2); } return 0;}
//通式
  1. int SanFen(int l,int r) //找凸点  
  2. {  
  3.     while(l < r-1)  
  4.     {  
  5.         int mid  = (l+r)/2;  
  6.         int mmid = (mid+r)/2;  
  7.         if( f(mid) > f(mmid) )  
  8.             r = mmid;  
  9.         else  
  10.             l = mid;  
  11.     }  
  12.     return f(l) > f(r) ? l : r;  
  13. }  
原创粉丝点击