我90pts了无数次。。。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int h,x,y,z,t[100010],ans;
queue<int> q;
int max(int a,int b){
return (a>b?a:b);
}
signed main(){
scanf("%lld%lld%lld%lld",&h,&x,&y,&z);
if(x==1||y==1||z==1){
printf("%lld",h);
return 0;
}
if(x>z) swap(x,z);
if(y>z) swap(y,z);
memset(t,-1,sizeof(t));
t[1]=0;
q.push(1);
while(!q.empty()){
int now=q.front(),a=now+x,b=now+y,sa=t[now],sb=t[now];
q.pop();
if(a>=z){
a-=z;
sa++;
}
if(b>=z){
b-=z;
sb++;
}
if(t[a]==-1){
t[a]=sa;
q.push(a);
}
if(t[b]==-1){
t[b]=sb;
q.push(b);
}
}
for(int i=0;i<z;i++){
if(t[i]!=-1) ans+=max((h-i+z)/z-t[i],0);
}
printf("%lld",ans);
return 0;
}