三分 --- POJ 3301 Texas Trip

 Texas Trip#

Problem's Link:   http://poj.org/problem?id=3301
#


 

Mean: 

给定n(n <= 30)个点,求出包含这些点的面积最小的正方形的面积。

 

analyse:

首先要确定的是旋转的角度在0到180度之间即可,超过180度是和前面的相同的。

坐标轴旋转后,坐标变换为:

 

X’ = x * cosa - y * sina;
y’ = y * cosa + x * sina;

 

 

 

Time complexity: O(n)

 

Source code: 

 

复制代码
//  Memory   Time
//  1347K     0MS
//   by : crazyacking
//   2015-03-31-22.18
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<iostream>
#include<algorithm>
#define MAXN 1000010
#define LL long long
using namespace std;
#define eps 1e-12
#define INF (1<<25)

double ppx[40],ppy[40];
int n;

double  Cal(double a)
{
    double xMin=INF*1.0,yMin=INF*1.0,xMax=-INF*1.0,yMax=-INF*1.0;

    for(int i=1;i<=n;i++)
    {
        double x1=ppx[i]*cos(a)-ppy[i]*sin(a);
        double y1=ppx[i]*sin(a)+ppy[i]*cos(a);

        if(x1>xMax)
            xMax=x1;
        if(x1<xMin)
            xMin=x1;

        if(y1>yMax)
            yMax=y1;
        if(y1<yMin)
            yMin=y1;
    }
    if(xMax-xMin<yMax-yMin)
        return yMax-yMin;
    else
        return xMax-xMin;

}

int main()
{
    int t;
    int x,y;

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            ppx[i]=x+500.0;
            ppy[i]=y+500.0;
        }
        double le=0,ri=PI,mid,mmid;
        double mid_va,mmid_va;

        while(le+eps<=ri)
        {
            mid=(le+ri)/2;
            mmid=(mid+ri)/2;
            mid_va=Cal(mid);
            mmid_va=Cal(mmid);
            if(mid_va<mmid_va)
                ri=mmid;
            else
                le=mid;
        }
        printf("%.2lf\n",Cal(le)*Cal(le));
    }
    return 0;
}
View Code
复制代码

 

 

 

posted @   北岛知寒  阅读(189)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
主题色彩