Problem - 18B - Codeforces

 

题意:

有n个长为l的木板,第i个木板的起始位置在(i-1)*m

你的初始位置为0,每次跳跃距离为d

每次的落点在木板上才可以继续跳,问在哪个位置掉下去

 

记录到达一个木板的位置

设现在的位置为now,所在木板的右端点为r

那么(r-now)/d就是在这个木板还能跳跃的次数

(r-now+d)/d就是到下一个木板还需要的跳跃次数

再*d就是到下一个木板落点还需要的距离

如果落点在木板左端点左侧,就会掉下去

 

#include<cstdio>

int main()
{
    int n,d,m,l;
    scanf("%d%d%d%d",&n,&d,&m,&l);
    long long now=0,r;
    for(long long i=1;i<=n+1;++i)
    {
        if(now<(i-1)*m || i>n) break;
        r=(i-1)*m+l;
        if(r>=now) now+=(r-now+d)/d*d;
    }
    printf("%lld",now);
}

 

相关文章:

  • 2021-10-25
  • 2021-10-30
  • 2022-12-23
  • 2021-06-30
  • 2021-06-11
  • 2021-10-08
  • 2021-10-27
猜你喜欢
  • 2021-11-06
  • 2021-11-25
  • 2021-05-30
  • 2021-11-17
  • 2021-05-25
  • 2022-03-08
  • 2021-10-08
相关资源
相似解决方案