失败的滑雪-洛谷-P2338

原题
贝西正在参加一项滑雪比赛。她从起点出发的时候,速度恒定为每秒 1 米。然而,随着比赛进程的增加,她会犯很多错误,每次失误都会使她的速度下降。当她第一次失误后,速度会下降到每秒1/2 米,第二次失误后,速度会下降到每秒 1/3 米,第 k 次失误后,速度会下降到每秒 1/(k + 1) 米。
约翰记录了贝西的所有失误,一共有 N 个。有两种失误,一种发生在比赛开始后的某个时间点,另一种发生在赛道的某个位置上。有时,贝西可能在某个时间点到达某个位置,而恰好在这个时间点和位置上都有一次失误的记录,这两个记录要算作不同的失误,会对贝西的速度造成两次影响。比赛的终点距离起点有 1000 米,请问贝西需要多少时间才能滑过终点?
输入输出格式
输入格式:
第一行:单个整数 N ,1 ≤ N ≤ 10000
第二行到第 N + 1 行:每行开头有个大写字母,代表贝西的一个失误类型:
– 如果是 T,接下来会有一个整数 S,表示在比赛开始后的第 S 秒钟整发生了一次失误,
1 ≤ S ≤ 10^7
– 如果是 D,接下来会有一个整数 X,表示在距离起点 X 米处发生了一次失误,1 ≤ X ≤
1000
输出格式:
单个整数:表示贝西需要多少秒才能滑到终点,如果精确的时间不是整数,则用四舍五入的方
法向最接近的整数取整
输入输出样例
输入样例#1:
2
T 30
D 10
输出样例#1:
2970
说明
前 10 秒,贝西的速度是每秒 1 米,她滑了 10 米。然后她遭遇了第一次失误,在接下来的 20 秒内,她又滑了 10 米。之后她遭遇了第二次失误,还剩下 980 米,所以她共计花去10 + 20 + 2940 = 2970 秒才完成比赛。
题意:
一个人在1000米的雪道上滑雪,在Ti秒和Di位置时,会发生失误,第k次失误会使速度减慢至(1/(k+1))。
问花多少秒到终点?注:若是在Ti秒跑到了Di处,则算做两次不同的失误,速度减慢两次。最终结果四舍五入。
题解:
一道模拟水题,就是没看清最后的四舍五入,害的我改了很久。这道题题目只需要模拟下一次失误是在哪就行。(此代码中,若是在Ti秒滑雪到了Di处则无需考虑,就相当于是多循环了一次)。
附上AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
double d1,d2,v=1.0,cnt=0,dis=0;//d1是Ti秒时走的路程,d2是Di处时走的路程
int n,t[10005],d[10005],cntt=0,cntd=0,err=1;
int main()
{
    cin>>n;
    char tmp;
    int tmpx;
    for(int i=1;i<=n;i++)
    {
        cin>>tmp>>tmpx;
        if(tmp=='T')t[++cntt]=tmpx;//区别分配T,D
        else d[++cntd]=tmpx;
    }
    sort(t+1,t+cntt+1);
    sort(d+1,d+cntd+1);
    t[++cntt]=1e9;
    d[++cntd]=1e9;//以免超出某一个任务,另一个始终大一些,则无法输出正确答案
    int i=1,j=1;
    //cout<<cntt<<" "<<cntd<<endl;测试中间数据
    while(i<cntt||j<cntd)
    {
        v=1.0/err;//要用1.0,否则v会变成0;
        d1=dis+(t[i]*1.0-cnt)*v;
        d2=d[j];
        //cout<<d1<<" "<<d2<<endl;
        if(d1<d2)
        {
            dis=d1;
            cnt=t[i];
            i++;
        }
        else
        {
            cnt+=(d2-dis)/v;
            dis=d2;
            j++;
        }
        err++;
        //cout<<cnt<<" "<<dis<<" "<<v<<endl;
    }
    cnt+=(1000-dis)/(1.0/(1.0*err));//剩余的路程直接计算
    cout <<(int)(cnt+0.5)<< endl;//四舍五入
    return 0;
}

欢迎评论!

猜你喜欢

转载自blog.csdn.net/wjl_zyl_1314/article/details/82933788