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;
}

Download