题目链接
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100005, maxm = (1 << 20) + 5;
#define INF 0x3f3f3f3f
ll gcd(ll c, ll d)
{
ll h;
ll k = d % c; //c为较小的数,d为较大的数
if (k == 0)
return c;
else
{
while (k != 0)
{
h = k;
k = c % h;
c = h;
}
return c;
}
}
char a[1005];
int main()
{
ll n, p, w, d, i, j;
scanf("%lld%lld%lld%lld", &n, &p, &w, &d);
int flag = 0;
ll x;
x = gcd(w, d);
if (p % x != 0)
printf("-1\n");
else
{
for (i = min(n, p / w); i >= 0; i--)
{
if (i * w + (n - i) * d < p)
{
break;
}
else
{
if ((p - i * w) % d == 0)
{
flag = 1;
printf("%lld %lld %lld\n", i, (p - i * w) / d, n - i - (p - i * w) / d);
break;
}
}
}
if (flag == 0)
printf("-1\n");
}
}