感觉没什么问题,和题解对拍也一直找不到差异。可WA了2,7,9,10个点。。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int h,x,y,z,dis[200010],st[200010],ans;
struct P{
int v,w;
};vector<P> e[200010];
signed main(){
cin>>h>>x>>y>>z;
if(x==1||y==1||z==1){cout<<h;return 0;}
h--;
for(int i=0;i<x;i++) e[i].push_back({(i+y)%x,y}),e[i].push_back({(i+z)%x,z});
for(int i=1;i<x;i++) dis[i]=1e15;
queue<int> q;
q.push(0),dis[0]=0;
while(q.size()){
int t=q.front();q.pop();st[t]=0;
for(auto i:e[t]){
if(dis[t]+i.w<dis[i.v]){
dis[i.v]=dis[t]+i.w;
if(!st[i.v]) st[i.v]=1,q.push(i.v);
}
}
}for(int i=0;i<x;i++) if(h>=dis[i]) ans+=(h-dis[i])/x+1;
cout<<ans;
}