POJ 3301
2015-02-05 12:35
197 查看
开始就是瞄着三分来做的,但看题目,感觉是旋转卡壳吧。。可是,用了旋转卡壳还三分条毛啊。。
可以令正方形不旋转,而改为令点绕原点旋转,这样,很好的解决了问题,就可以比较X轴最大长度和Y轴最大长度来确定正方形的边长了。然后三分旋转角度就可以了。
可以令正方形不旋转,而改为令点绕原点旋转,这样,很好的解决了问题,就可以比较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\n",cal(l)); } return 0; }
相关文章推荐
- POJ 3301 Texas Trip (三分求极限)
- POJ 3301 Texas Trip
- poj 3301 Texas Trip
- POJ 3301 Texas Trip 计算几何 三分法求极值点
- POJ 3301 Texas Trip
- poj3301——Texas Trip
- POJ3301
- POJ 3301 三分(最小覆盖正方形)
- POJ 3301 Texas Trip (三分)
- poj 3301 Texas Trip 三分法求旋转角极值
- 三分 --- POJ 3301 Texas Trip
- POJ 3301 三分
- poj 3301 Texas Trip 三分搜索
- POJ 3301 三分
- poj 3301 Texas Trip(旋转+三分)
- 三分 --- POJ 3301 Texas Trip
- POJ 3301 Texas Trip
- POJ 3301 Texas Trip(最小正方形覆盖、点坐标旋转)
- POJ 3301 Texas Trip(三分)
- poj 3301 Texas Trip 三分法