zoukankan      html  css  js  c++  java
  • poj3301--Texas Trip(最小正方形覆盖)

    题目链接:点击打开链接

    题目大意:给出n个点的坐标。如今要求一个正方形,全然包围n个点。而且正方形面积最小,求最小的正方形面积。

    表示不能理解为什么面积随着角度的变化是一个单峰的函数,等待大牛告诉一下,,。

    假设面积随角度变化是单峰的函数。那么自然就能够想到是三分,依照题目要求求正方形最小的面积,假设正方形是平行于x轴的,那么正方形面积是x的最大距离*y的最大的距离。然后旋转正方形。在0到90度内总会找到一个正方形面积的最小值,,,可是旋转正方形比較麻烦,我们能够考虑旋转坐标系,将做坐标系旋转0到90度。按旋转的角度又一次计算各点的坐标。然后找出x的差和y的差,计算面积。

    由于是单峰的函数,所以用三分角度,找到一个最小的面积。

    注意:三分的eqs要非常小,,。。,

    角度旋转公式x = x*cos(j) - y*sin(j) ; y = x*sin(j) + y*cos(j) ;

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std ;
    #define eqs 1e-12
    #define INF 0x3f3f3f3f
    #define PI acos(-1.0)
    struct node{
        double x , y ;
    }p[35];
    int n ;
    double maxx , minx , maxy , miny ;
    double f(double j) {
        int i ;
        double x , y ;
        maxx = maxy = -INF ;
        minx = miny = INF ;
        for(i = 0 ; i < n ; i++) {
            x = p[i].x*cos(j) - p[i].y*sin(j) ;
            y = p[i].x*sin(j) + p[i].y*cos(j) ;
            maxx = max(maxx,x) ;
            minx = min(minx,x) ;
            maxy = max(maxy,y) ;
            miny = min(miny,y) ;
        }
        return max( maxx-minx,maxy-miny ) ;
    }
    int main() {
        int t , i ;
        scanf("%d", &t) ;
        while( t-- ) {
            scanf("%d", &n) ;
            for(i = 0 ; i < n ; i++) {
                scanf("%lf %lf", &p[i].x, &p[i].y) ;
            }
            double low = 0.0 , mid1 , mid2 , high = PI/2.0;
            while( low + eqs < high ) {
                mid1 = (low + high)/2.0 ;
                mid2 = (mid1 + high) / 2.0 ;
                if( f(mid1) > f(mid2) )
                    low = mid1 ;
                else
                    high = mid2 ;
            }
            low = f(low) ;
            printf("%.2lf
    ", low*low ) ;
        }
        return 0 ;
    }


  • 相关阅读:
    列式数据库
    Subway POJ
    操作系统知识汇总
    Linux工具指南
    常用数据结构
    bzoj1257: [CQOI2007]余数之和 整除分块
    HDU
    hdu1693 Eat the Trees 插头dp
    HDU
    poj2411 轮廓线dp裸题
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6773517.html
Copyright © 2011-2022 走看看