MELE2 - ELEVATOR II
Tác giả: flashmt
Ngôn ngữ: C++
#include<iostream>
#define fr(a,b,c) for (a=b;a<=c;a++)
using namespace std;
int a,b,c,i,num;
long long n,re,d[100000],f[100000];
void push(long long x,long long y)
{
if (d[x]<0 || d[x]>y)
{
num++;
f[num]=x;
d[x]=y;
}
}
int main()
{
cin >> n >> a >> b >> c;
fr(i,0,c-1) d[i]=-1;
d[0]=0; i=0;
while (i<=num)
{
push((f[i]+a)%c,d[f[i]]+a);
push((f[i]+b)%c,d[f[i]]+b);
i++;
}
fr(i,0,c-1)
if (d[i]>=0 && d[i]<n)
re+=(n-1-d[i])/c+1;
cout << re << endl;
return 0;
}