原题链接
洛谷翻译
思路
1.由题意知道,败一场不得分,对最后的结果没有影响,所以我们可以不考虑失败的场数,只考虑胜场和平长,最后拿n减就是败场的次数
2.只需要输出一种符合题意的结果即可,我们可以这样想,尽可能的让胜场多,平场少,因为这样在相同的分数下可以使的比赛的场次最小,如果是平场多的话,有可能会超出n
3.最后只需判断是否符合情况即可
AC代码
#include<bits/stdc++.h>
using namespace std;
long long n, p, a, b, x, y;
int main() {
scanf("%lld%lld%lld%lld", &n, &p, &a, &b);
//这里当平的场次达到了a时,就会被胜场用更小的代替,与我们设想不符合
//(p - 1ll * b * y) % a 不是0的话,就表示没有正整数,继续寻找
while (y < a && (p - 1ll * b * y) % a){
++y;
}
if (y == a) {
cout<<-1<<endl;
return 0;
}
x = (p - 1ll * b * y) / a;
//判断x是否是合理的
if (x < 0 || x + y > n) {
cout<<-1<<endl;
return 0;
}
printf("%lld %lld %lld\n", x, y, n - x - y);
}
}