Codeforces 18 B. Platforms

問題

数直線上にn個の足場があり、(1番目から数えて)k番目の足場は[(k-1)m,(k-1)m+l]の線分である。
0の点から、右に幅dだけジャンプして着地することを繰り返す。


足場がない場所に着地すると着地失敗であるが、足場の端に着地することはできる。
最初に着地失敗する地点の座標を求めよ。

制約条件

n,d,m,l≦10^6

方針

シミュレート。
一つの足場上での複数回のジャンプは全部シミュレートするとTLEなので、まとめて足す。

ソースコード

ll n,d,m,l;
void run(){
  cin>>n>>d>>m>>l;
  ll x=0;
  rep(i,n){
    if(x<i*m)break;
    if(x<=i*m+l)x+=((i*m+l-x)/d+1)*d;
  }
  cout<<x<<endl;
}