CF1244C

题目描述

给出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");
}
原文地址:https://www.cnblogs.com/gmh77/p/11738700.html