题意:
有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); }