P3403 跳楼机
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,x,y,z,dis[N],vis[N];
vector<pair<int,int>>g[N];
void bfs(int s){
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
q.push({1,1%x});
while(!q.empty()){
auto [A,B]=q.top();
q.pop();
if(!vis[B]){
vis[B]=1,dis[B]=A;
for(auto [u,w]:g[B]){
if(!vis[u]){
q.push({A+w,u});
}
}
}
}
}
signed main(){
cin>>n>>x>>y>>z;
for(int i=0;i<x;i++){
g[i].push_back({(i+y)%x,y}),g[i].push_back({(i+z)%x,z});
}
bfs(0);
int ans=0;
for(int i=0;i<x;i++){
if(n>=dis[i]){
ans+=(n-dis[i])/x+1;
}
}
cout<<ans;
}