hdu 2142 the balance
来源:互联网 发布:讨鬼传2pc优化 编辑:程序博客网 时间:2024/06/03 19:18
Description
Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. For example, to measure 200mg of aspirin using 300mg weights and 700mg weights, she can put one 700mg weight on the side of the medicine and three 300mg weights on the opposite side (Figure 1). Although she could put four 300mg weights on the medicine side and two 700mg weights on the other (Figure 2), she would not choose this solution because it is less convenient to use more weights.
You are asked to help her by calculating how many weights are required.
You are asked to help her by calculating how many weights are required.
Input
The input is a sequence of datasets. A dataset is a line containing three positive integers a, b, and d separated by a space. The following relations hold: a != b, a <= 10000, b <= 10000, and d <= 50000. You may assume that it is possible to measure d mg using a combination of a mg and b mg weights. In other words, you need not consider "no solution" cases.
The end of the input is indicated by a line containing three zeros separated by a space. It is not a dataset.
The end of the input is indicated by a line containing three zeros separated by a space. It is not a dataset.
Output
The output should be composed of lines, each corresponding to an input dataset (a, b, d). An output line should contain two nonnegative integers x and y separated by a space. They should satisfy the following three conditions.
No extra characters (e.g. extra spaces) should appear in the output.
- You can measure dmg using x many amg weights and y many bmg weights.
- The total number of weights (x + y) is the smallest among those pairs of nonnegative integers satisfying the previous condition.
- The total mass of weights (ax + by) is the smallest among those pairs of nonnegative integers satisfying the previous two conditions.
No extra characters (e.g. extra spaces) should appear in the output.
Sample Input
700 300 200500 200 300500 200 500275 110 330275 110 385648 375 40023 1 100000 0 0
Sample Output
1 31 11 00 31 149 743333 1
看网上的写法是找附近的几个点
这种做法是找两组 一组 用x算 y 另一组用y算 x 我也不知道为什么是这样。。。
- Source Code
#include <iostream>#include <algorithm>#include <cmath>#include <cstring>#include <cstdio>using namespace std;typedef long long LL;LL x,y;void exgcd(LL a,LL b,LL &x,LL &y){ if(b==0) { x=1; y=0; return; } LL x1,y1; exgcd(b,a%b,x1,y1); x=y1; y=x1-(a/b)*y1;}LL gcd(LL a,LL b){ LL r=a%b; while(r) { a=b; b=r; r=a%b; } return b;}int main(){ LL a,b,d,x1,y1; while(scanf("%lld%lld%lld",&a,&b,&d)!=-1) { if(a==0&&b==0&&d==0) break; LL g=gcd(a,b); a=a/g;b=b/g; exgcd(a,b,x,y); x1=x*d/g; x1=(x1%b+b)%b; y1=(d/g-a*x1)/b; if(y1<0) y1=-y1; y=y*d/g; y=(y%a+a)%a; x=(d/g-b*y)/a; if(x<0) x=-x; if(x+y<x1+y1) printf("%lld %lld\n",x,y); else printf("%lld %lld\n",x1,y1); } return 0;}
0 0
- hdu 2142 the balance
- hdu 1709 The Balance
- HDU 1356 The Balance
- hdu 1709 The Balance
- HDU 1709 The Balance
- hdu 1709-The Balance
- Hdu 1709 The Balance
- hdu 1709 The Balance
- hdu 1709 The Balance
- hdu 1709 The Balance
- hdu 1709 The Balance
- HDU 1709 The Balance
- hdu 1709 The Balance
- HDU 1709 The Balance
- HDU 1709 The Balance
- hdu 1709 The Balance
- hdu 1709 The Balance
- hdu 1709 The Balance (dp)
- APP在线支持
- 精读前后端渲染之争
- java中一些经常用到的小方法
- 6.Scala中的Map和Tupple
- 相比于普通网站,建设高端网站有哪些突出的优势
- hdu 2142 the balance
- HTTP 状态消息
- 堆是先进先出,栈是先进后出
- 救基友记2
- elasticsearch 默认不支持检索hadoop
- 好点的主页导航
- <meta>标签
- 白噪声\高斯噪声\高斯白噪声的区别
- ThinkPHP框架学习