marbles-ACM

算法:设A为弹珠的总数,x,y分别为两种盒子的数目。Z为买这些盒子的花销。那么就有下面的等式:n1*x+n2*y=A,c1*x+c2*y=Z. 如果先救y的话,就要先求出n1与c1的最小公倍数。求最小公倍数的公式有lcm(x,y)=x*y/gcd(x,y),因为x*y可能会超出范围,还有一个公式是(x/gcd(x,y))*y. 利用第二个公式可以求出n1与c1的最小公倍数。设lcm(c1,n1)=a*n1=b*c1. 两式相减得,y=(b*Z-a*A)/(b*c2-a*n2). 因为y>=0, 所以b*Z-a*A>=0, b*c2-a*n2>0. 如果第二个等式不成立的话,便可判定没有解决方案。如果成立的话,Z>=a*A/b. 这样就可以求出Z,然后代回等式,就可救出y,如果y不是整数的话,也说明没有解决方案。再求出x, 如果x不是整数,也可说明没有解决方案。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值