Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define st first
- #define nd second
- #define pb push_back
- #define mkp make_pair
- #define lwbnd lower_bound
- #define upbnd upper_bound
- #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
- #define FORS(i,a,b) for(int i=(a);i<(b);++i)
- #define PII pair<int,int>
- #define VI vector<int>
- #define VPII vector<PII>
- #define ALL(x) x.begin(),x.end()
- #define SZ(x) ((int)(x).size())
- #define ll long long
- #define MOD 1000000007 //998244353
- #define maxn 100005
- const int INF=0x3f3f3f3f;
- ll n,p,w,d,x,y,z;
- ll extEuclid(ll a,ll b,ll &x, ll &y){
- if(b==0){
- x=1;
- y=0;
- return a;
- }else{
- ll x0,y0;
- d=extEuclid(b,a%b,x0,y0);
- x=y0;
- y=x0-(a/b)*y0;
- return d;
- }
- }
- int main()
- {
- cin.tie(0);
- ios_base::sync_with_stdio(0);
- cin>>n>>p>>w>>d;
- ll ans=extEuclid(w,d,x,y);
- ll gcd=__gcd(w,d);
- if(p%ans)
- cout<<-1;
- else{
- int k;
- x=x*(p/ans);
- y=y*(p/ans);
- if(y>n||x<0){
- if(x<0)
- k=(abs(x)/w*gcd)+((abs(x)%w*gcd)!=0);
- else
- k=((y-n)/w*gcd)+(((y-n)%w*gcd)!=0);
- x=x+k*d/gcd;
- y=y-k*w/gcd;
- }
- if(x>n||y<0){
- if(y<0)
- k=(abs(y)/d*gcd)+((abs(y)%d*gcd)!=0);
- else
- k=((x-n)/d*gcd)+(((x-n)%d*gcd)!=0);
- x=x-k*d/gcd;
- y=y+k*w/gcd;
- }
- if((x+y)>n&&(d/gcd-w/gcd)<0){
- k=((((x+y)-n)/(w/gcd-d/gcd))+(((x+y)-n)%(w/gcd-d/gcd)!=0));
- x=x+k*d/gcd;
- y=y-k*w/gcd;
- }
- if((x+y)>n&&(w/gcd-d/gcd)<0){
- k=((((x+y)-n)/(d/gcd-w/gcd))+(((x+y)-n)%(d/gcd-w/gcd)!=0));
- x=x-k*d/gcd;
- y=y+k*w/gcd;
- }
- if(x<0||y<0||(x+y)>n)
- return cout<<"-1",0;
- else
- cout<<x<<' '<<y<<' '<<(n-x-y);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement