zoukankan      html  css  js  c++  java
  • 三分查找——POJ3301

    三分

    主要推出fun函数

    fun(A)的意义就是在原来坐标上的点经过A弧度逆旋转后,正方形(边与坐标轴平行)最小边长要多长

    fun()在旋转的时候符合凸函数,所以三分求最值

    View Code
    #include<stdio.h>
    #include<math.h>
    #include<iostream>
    using namespace std;

    const double maxn=0xfffffffffffff;
    const double minn=-0xfffffffffffff;
    const double PI=acos(-1.0);

    double x[39],y[39];
    int n;

    double fun(double a)
    {
    double maxx=minn,minx=maxn,maxy=minn,miny=maxn;
    int i;
    for(i=1;i<=n;i++)
    {
    double tx,ty;
    tx=x[i]*cos(a)-y[i]*sin(a);
    ty=y[i]*cos(a)+x[i]*sin(a);

    maxx=max(maxx,tx);
    minx=min(minx,tx);
    maxy=max(maxy,ty);
    miny=min(miny,ty);
    }

    return max(maxx-minx,maxy-miny);
    }

    int main()
    {

    int t,i;
    double ll,rr,mid,midmid;
    scanf("%d",&t);
    while(t--)
    {
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
    scanf("%lf%lf",&x[i],&y[i]);
    }

    ll=0;
    rr=PI;
    while(ll+0.00000000000001<rr)
    {
    mid=(ll+rr)/2.0;
    midmid=(mid+rr)/2.0;
    if(fun(mid)<=fun(midmid))
    {
    rr=midmid;
    }
    else
    ll=mid;
    }

    printf("%.2lf\n",fun(ll)*fun(ll));
    }
    }



  • 相关阅读:
    uniapp版本迭代
    上传图像裁剪功能
    uniapp 复制到剪切板
    uniapp吸顶功能
    地图导航到目的地
    uniapp视频图片上传
    获取昨天今天明天的时间
    【VUE】 前端面试题小结
    vue获取当前时间 实时刷新
    CSS linear-gradient() 函数
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2316640.html
Copyright © 2011-2022 走看看