UVA 10385——Duathlon(三分)

本文介绍了一种通过调整自行车和跑步距离比例来使特定选手赢得比赛的方法,并提供了计算所需时间及距离的具体实现代码。

题目链接:点击打开链接

题目大意:新的一项运动是由骑车和跑步组成的,总长度是固定的,但是和骑车与跑步的长度比例是裁判员自己定的,每一位选手都有两个速度(骑车和跑步),最后一名选手贿赂  了裁判员,求算出最后一名选手能否得冠,然后计算出所需要的时间以及裁判员所决定的长度

AC Code:

//明确要求的函数是什么
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 25;
double r[maxn], k[maxn];
int n;
double t;

double f(double x)
{
    double temp = x / r[1] + (t-x)/k[1];
    for(int i = 2; i < n; i++)
        temp = min(temp, x/r[i] + (t-x)/k[i]);
    //return temp;
    return temp - (x/r[n] + (t-x)/k[n]);
}


double Search(double left, double right)
{
    //for(int i = 0; i < 100; i++)
    while (right-left > 1e-4)
    {
        double mid = (left+right)/2;
        double mmid = (mid+right)/2;
        if(f(mid) < f(mmid))
            left = mid;
        else
            right = mmid;
    }
    return left;
}


int main()
{
    while(scanf("%lf", &t) != EOF)
    {
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) //注意是从1开始变化
            scanf("%lf %lf", &r[i], &k[i]);
        double x = Search(0, t);
        double xx = f(x);
        if(xx < 0)
            printf("The cheater cannot win.\n");
        else
            printf("The cheater can win by %.0lf seconds with r = %.2lfkm and k = %.2lfkm.\n", xx*3600, x, t-x);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值