UVA 10385——Duathlon(三分)

来源:互联网 发布:嗯淘宝网店教学视频 编辑:程序博客网 时间:2024/06/16 20:06

题目链接:点击打开链接

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

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;}