CF1244C The Football Season

https://www.luogu.com.cn/problem/CF1244C

先把下面那个条件转换一下变成

x + y ≤ n x+y\le n x+yn
注意到 d < w d<w d<w,所以y越小越好

移一下项
p − y d = x w p-yd=xw pyd=xw
然后如果 y > = w y>=w y>=w那么必然无解(根据扩展欧几里得(exgcd),可以得到y必然<w)

直接枚举即可
code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n, p, w, d;
int main() {
    scanf("%lld%lld%lld%lld", &n, &p, &w, &d);
    ll y = 0;
    while(y < w && (p - d * y) % w != 0) y ++;
    if(y == w) {
        printf("-1"); return 0;
    }
    ll x = (p - d * y) / w;
    if(x < 0 || x + y > n) {
        printf("-1"); return 0;
    }
    printf("%lld %lld %lld", x, y, n - x - y);
    return 0;
}
posted @ 2021-10-10 21:48  lahlah  阅读(26)  评论(0编辑  收藏  举报