zoukankan      html  css  js  c++  java
  • 三分&&二分模板

    牛牛战队的比赛地

    简单三分的做法,一般判断距离问题考虑三分算法.

    此题为何三分:可以将此题近似为从无穷小和无穷大到原地聚集则两边的无穷往中间走的过程是减小,所以可能是单峰函数

    一般情况下可以先在草稿本上画一画试一试看看三分可不可以算出正确答案

    #include<bits/stdc++.h>
    #define INF 0x3f3f3f3f
    #define DOF 0x7f7f7f7f
    #define mem(a,b) memset(a,b,sizeof(a))
    typedef long long ll;
    using namespace std;
    const int maxn=1e5+10;
    const double eps=1e-7;
    int n;
    struct node{
        double x,y;
    }node[maxn];
    
    double calc(double x)
    {
        double maxx=0,dis;
        for(int i=0;i<n;++i){
            dis=(node[i].x-x)*(node[i].x-x)+node[i].y*node[i].y;
            maxx=max(maxx,dis);
        }
        return maxx;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=0;i<n;++i) scanf("%lf%lf",&node[i].x,&node[i].y);
        double lmid,rmid,lmidf,rmidf,l=-10000,r=10000;//三分模板变量
        double ans=DOF;
        while(r-l>eps){
            lmid=l+(r-l)/3.0;rmid=r-(r-l)/3.0;
            lmidf=calc(lmid);rmidf=calc(rmid);//转换式
            ans=min(ans,min(lmidf,rmidf));
            if(lmidf<rmidf) r=rmid-eps;
            else l=lmid+eps;
        }
        printf("%d
    ",(int)sqrt(ans));
    
    }

    三分整数模板

        while(l<=r){
            lmid=l+(r-l)/3;rmid=r-(r-l)/3;
            lmidf=f(lmid);
            rmidf=f(rmid);
            ans=min(ans,min(lmidf,rmidf));
            if(lmidf<rmidf){
                r=rmid-1;
            }else l=lmid+1;
    
        }

  • 相关阅读:
    机器视觉
    视觉感知
    计算机视觉
    模板匹配
    Kinect
    手势识别
    三维重建
    单元化理解
    [面试经] Java
    [面试经]Java中final、finally、finalize有什么不同?
  • 原文地址:https://www.cnblogs.com/waryan/p/12456955.html
Copyright © 2011-2022 走看看