2013湘潭赛 Hurry Up 三分算法

本文介绍了一个使用三分搜索算法解决最短路径问题的方法。该算法用于寻找两点间特定条件下最短的时间路径,通过不断缩小搜索范围实现高效计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三分算法讲解

hurry up题目链接

用min函数和max函数写不过,自己手写比较函数通过了,貌似比赛也是这样的~~囧

最后就是 比较两条路线的路径最短,第二条路线是一条满足


#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;
const double eps=1e-8;
struct node{
    double x,y;
} ori,des,center;
double car,peo;
double dis(node a,node b){
    return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}

double  three_divide(){
    node mid,midmid;
    mid.y=0;
    midmid.y=0;
    double ans_mid,ans_midmid;
    double left,right;
    if(ori.x<des.x){
        left=ori.x;
        right=des.x;
    }
    else {
        left=des.x;
        right=ori.x;
    }
    while(right-left>eps){
         mid.x=(left+right)/2;      //三分算法的关键步骤
         midmid.x=(mid.x+right)/2;
         ans_mid=dis(ori,mid)/peo+dis(des,mid)/car;
         ans_midmid=dis(ori,midmid)/peo+dis(des,midmid)/car;
         if(ans_mid<ans_midmid) right=midmid.x;
         else left=mid.x;
    }
    mid.x=left;
    return dis(ori,mid)/peo+dis(des,mid)/car;
}



int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        scanf("%lf%lf%lf%lf%lf%lf",&ori.x,&ori.y,&des.x,&des.y,&peo,&car);
        double ans1=dis(ori,des)/peo,ans2;
        ans2=three_divide();
        printf("%.2lf\n",ans1>ans2?ans2:ans1);
    }

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值