模拟题
细节处理好就可以啦 >_<
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;
const int MAX = 1e6 + 100;
struct ax
{
LL left,right;
}data[MAX];
int n,d,m,l;
int main()
{
// (k-1)m,(k-1)m + l
while(cin>>n>>d>>m>>l)
{
LL len = 0;
for(int i = 1;i <= n;i ++)
{
data[i].left = (LL)(i-1)*m;
data[i].right = (LL)((LL)(i-1)*m+l);
}
int k = 1;
while(k <= n)
{
if(len < data[k].left)
break;
if(len >= data[k].left && len <= data[k].right)
{
int w = (data[k].right-len);
len += (w/d+1)*d;
}
k ++;
}
cout<<len<<endl;
}
return 0;
}