zoukankan      html  css  js  c++  java
  • POJ 3301

    开始就是瞄着三分来做的,但看题目,感觉是旋转卡壳吧。。可是,用了旋转卡壳还三分条毛啊。。

    可以令正方形不旋转,而改为令点绕原点旋转,这样,很好的解决了问题,就可以比较X轴最大长度和Y轴最大长度来确定正方形的边长了。然后三分旋转角度就可以了。

    #include <iostream>
    #include <cmath>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    struct Point{
    	double x,y;
    };
    Point point[50];
    int n;
    Point tmp[50];
    
    const double inf=1e10;
    
    double cal(double ang){
    	double x,y;
    	double xmax=-inf,xmin=inf;
    	double ymax=-inf,ymin=inf;
    	for(int i=1;i<=n;i++){
    		x=cos(ang)*point[i].x-sin(ang)*point[i].y;
    		y=cos(ang)*point[i].y+sin(ang)*point[i].x;
    		xmax=max(xmax,x);
    		xmin=min(xmin,x);
    		ymax=max(ymax,y);
    		ymin=min(ymin,y);
    	}
    	return max((xmax-xmin),(ymax-ymin))*max(xmax-xmin,ymax-ymin);
    }
    
    int main(){
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++){
    			scanf("%lf%lf",&point[i].x,&point[i].y);
    		}
    		double l=0,r=180; double m,mm;
    		while(l+(1e-8)<r){
    			m=l+(r-l)/3;
    			mm=r-(r-l)/3;
    			if(cal(m)>cal(mm))
    			l=m;
    			else r=mm;
    		}
    		printf("%.2lf
    ",cal(l));
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    后海日记(8)
    后海日记(8)
    后海日记(7)
    后海日记(7)
    hadoop自己写的最高温度程序源码
    hadoop自己写的最高温度程序源码
    20张图为您讲述磁盘发展史
    20张图为您讲述磁盘发展史
    2017"百度之星"程序设计大赛
    汕头市赛srm1X T3
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4274509.html
Copyright © 2011-2022 走看看