2010-1117

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

题目大意是有一个队的队员练球,每个人有不同的带球速度,但每个人带球奔跑的时间有限,当自己带球时间到了之后可以传球但只能够向后传球,然后给出球场长度,问最短多长时间内可以把球带到底线。
这题显然就是一个贪心,将队员的速度按从大到小的顺序排个序然后模拟就可以了。
{{{
#!cpp
#include <cstdio>
#include <algorithm>
using namespace std;
int v[10001];
int main()
{
    int n,t,l;
    int rp;
    scanf("%d",&rp);
    for (int i=1;i<=rp;i++)
    {
        scanf("%d %d %d",&n,&t,&l);
        for (int j=1;j<=n;j++)
        {
            scanf("%d",&v[j]);
        }
        sort(v+1,v+n+1);
        double len=0;
        double time=0;
        bool findd=false;
        for (int j=n;j>=1;j--)
        {
            if ((l-len)/(0.0+v[j]) <=t)
            {
                findd=true;
                time+=(l-len)/(0.0+v[j]);
                break;
            }
            else
            {
                time+=t;
                len+=v[j]*t;
            }
        }
        if (findd)
            printf("%.2lf\n",time);
        else
            printf("-1\n");
    }
}
}}}

题目大意是有一个队的队员练球,每个人有不同的带球速度,但每个人带球奔跑的时间有限,当自己带球时间到了之后可以传球但只能够向后传球,然后给出球场长度,问最短多长时间内可以把球带到底线。

这题显然就是一个贪心,将队员的速度按从大到小的顺序排个序然后模拟就可以了。

#include <cstdio>
#include <algorithm>
using namespace std;
int v[10001];
int main()
{
    int n,t,l;
    int rp;
    scanf("%d",&rp);
    for (int i=1;i<=rp;i++)
    {
        scanf("%d %d %d",&n,&t,&l);
        for (int j=1;j<=n;j++)
        {
            scanf("%d",&v[j]);
        }
        sort(v+1,v+n+1);
        double len=0;
        double time=0;
        bool findd=false;
        for (int j=n;j>=1;j--)
        {
            if ((l-len)/(0.0+v[j]) <=t)
            {
                findd=true;
                time+=(l-len)/(0.0+v[j]);
                break;
            }
            else
            {
                time+=t;
                len+=v[j]*t;
            }
        }
        if (findd)
            printf("%.2lf\n",time);
        else
            printf("-1\n");
    }
}