题目描述
给出n,p,w,d,求(x,y,z)使得
xw+yd=p
x+y+z=n
其中d<w<10^5^
题解
显然扩欧啊(
来自天国的long long
y如果大于等于w,则显然可以把y-w,把x+d,这样会更优
所以y=0~w-1
code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#define fo(a,b,c) for (a=b; a<=c; a++)
#define fd(a,b,c) for (a=b; a>=c; a--)
using namespace std;
long long n,p,w,d,x,y,z;
int i,j,k,l;
int main()
{
// freopen("c.in","r",stdin);
scanf("%I64d%I64d%I64d%I64d",&n,&p,&w,&d);
fo(y,0,w-1)
if (!((p-y*d)%w) && (p-y*d)/w+y<=n && (p-y*d)/w>=0 && (p-y*d)/w<=n && y<=n)
{
printf("%I64d %I64d %I64d
",(p-y*d)/w,y,n-(p-y*d)/w-y);
return 0;
}
printf("-1");
}