Advertisement
Alhiris

Untitled

Oct 13th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.04 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define st          first
  4. #define nd          second
  5. #define pb          push_back
  6. #define mkp         make_pair
  7. #define lwbnd       lower_bound
  8. #define upbnd       upper_bound
  9. #define FOR(i,a,b)  for(int i=(a);i<=(b);++i)
  10. #define FORS(i,a,b) for(int i=(a);i<(b);++i)
  11. #define PII         pair<int,int>
  12. #define VI          vector<int>
  13. #define VPII        vector<PII>
  14. #define ALL(x)      x.begin(),x.end()
  15. #define SZ(x)       ((int)(x).size())
  16. #define ll          long long
  17. #define MOD         1000000007 //998244353
  18. #define maxn        100005
  19. const int INF=0x3f3f3f3f;
  20.  
  21. ll n,p,w,d,x,y,z;
  22.  
  23. ll extEuclid(ll a,ll b,ll &x, ll &y){
  24.     if(b==0){
  25.         x=1;
  26.         y=0;
  27.         return a;
  28.     }else{
  29.         ll x0,y0;
  30.         d=extEuclid(b,a%b,x0,y0);
  31.         x=y0;
  32.         y=x0-(a/b)*y0;
  33.         return d;
  34.     }
  35. }
  36.  
  37. int main()
  38. {
  39.     cin.tie(0);
  40.     ios_base::sync_with_stdio(0);
  41.     cin>>n>>p>>w>>d;
  42.     ll ans=extEuclid(w,d,x,y);
  43.     ll gcd=__gcd(w,d);
  44.     if(p%ans)
  45.         cout<<-1;
  46.     else{
  47.         int k;
  48.         x=x*(p/ans);
  49.         y=y*(p/ans);
  50.         if(y>n||x<0){
  51.             if(x<0)
  52.                 k=(abs(x)/w*gcd)+((abs(x)%w*gcd)!=0);
  53.             else
  54.                 k=((y-n)/w*gcd)+(((y-n)%w*gcd)!=0);
  55.             x=x+k*d/gcd;
  56.             y=y-k*w/gcd;
  57.         }
  58.         if(x>n||y<0){
  59.             if(y<0)
  60.                 k=(abs(y)/d*gcd)+((abs(y)%d*gcd)!=0);
  61.             else
  62.                 k=((x-n)/d*gcd)+(((x-n)%d*gcd)!=0);
  63.             x=x-k*d/gcd;
  64.             y=y+k*w/gcd;
  65.         }
  66.         if((x+y)>n&&(d/gcd-w/gcd)<0){
  67.             k=((((x+y)-n)/(w/gcd-d/gcd))+(((x+y)-n)%(w/gcd-d/gcd)!=0));
  68.             x=x+k*d/gcd;
  69.             y=y-k*w/gcd;
  70.         }
  71.         if((x+y)>n&&(w/gcd-d/gcd)<0){
  72.             k=((((x+y)-n)/(d/gcd-w/gcd))+(((x+y)-n)%(d/gcd-w/gcd)!=0));
  73.             x=x-k*d/gcd;
  74.             y=y+k*w/gcd;
  75.         }
  76.         if(x<0||y<0||(x+y)>n)
  77.             return cout<<"-1",0;
  78.         else
  79.             cout<<x<<' '<<y<<' '<<(n-x-y);
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement