Marbles UVA - 10090

发布时间 2023-04-26 21:45:24作者: towboat

给定两种购买物品的方案:花费 c1元购买 n1 个物品,或者花费 c2c2 元购买 n2n2 个物品。

方案可以无限使用,询问购买 n个物品至少要多少元,若无法恰好购买到 n 个物品输出 failed

 

 

 

 

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define int long long
int n;
int gcd(int a,int b,int &x,int &y){
    if (b == 0){
        x=1; y=0; return a;
    }
    int t = gcd(b,a%b,y,x); y -= a/b*x;
    return t;
}
 
 signed main(){
 	int c1,c2,n1,n2;
 	while(cin>>n&&n){
 		int x,y;
 		cin>>c1>>n1>>c2>>n2;
 		int g=gcd(n1,n2,x,y); 
 		if(n%g){
 			cout<<"failed\n";continue;
 		}
 		x=x*n/g ,y= y*n/g ;
 		
 		
 		 int A=(int)ceil(-(double)x/(double)(n2/g)),
 		B=(int)floor((double)y/(double)(n1/g));
 		if(B<A){
 			cout<<"failed\n";continue;
 		}
 		
 		if(c1*(x+A*n2/g) +c2*(y-A*n1/g)<
 			c1*(x+B*n2/g) +c2*(y-B*n1/g)){
 				cout<<(x+A*n2/g) << ' '<< (y-A*n1/g) <<endl;
 			}
 		else{
 			cout<<x+B*n2/g<<' '<<(y-B*n1/g)<<endl;
 		}
 	}
 }