POJ 2142 The Balance
2016-05-05 20:57
295 查看
题目链接:http://poj.org/problem?id=2142
题意:给两种砝码a,b,和待称量物品的重量d,用x个a和y个b来将物品称出,并使得x+y最小。
思路:a * x + b * y = d,扩展欧几里得。先让x为最小非负整数解,算出y;再让y为最小非负整数解,算出x,两种情况取最小的即可。
题意:给两种砝码a,b,和待称量物品的重量d,用x个a和y个b来将物品称出,并使得x+y最小。
思路:a * x + b * y = d,扩展欧几里得。先让x为最小非负整数解,算出y;再让y为最小非负整数解,算出x,两种情况取最小的即可。
#include <cstdio> #include <cstring> #include <string> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <set> #include <vector> #include <sstream> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod %100000007 int a,b,d; int exgcd(int a,int b,int &x,int &y) { if ( b == 0 ) { x = 1; y = 0; return a; } int r = exgcd( b , a % b , x , y ); int t = x; x = y; y = t - a/b * y; return r; } void slove(int a,int b,int d) { int x,y; int gcd = exgcd( a , b , x , y ); x*=d/gcd; y*=d/gcd; int addx = b/gcd; int addy = a/gcd; int m1,m2; int ansx,ansy; m1 = m2 = inf; x = ( x % addx + addx )% addx; y = (d - a*x)/b; ansx = x; ansy = abs(y); m1 = x + abs(y); m2 = a*x + b*abs(y); y = ( y % addy + addy )% addy; x = (d - b*y)/a; if ( abs(x) + abs(y) < m1 ) { m1 = abs(x) + abs(y); ansx = abs(x); ansy = abs(y); } else if ( abs(x) + abs(y) == m1 && a*abs(x) + b*abs(y) < m2 ) { ansx = abs(x); ansy = abs(y); } printf("%d %d\n",ansx,ansy); } int main() { while( ~scanf("%d%d%d",&a,&b,&d) ) { if ( a + b + d == 0 ) break; slove(a,b,d); } return 0; }
相关文章推荐
- UVA 531Compromise
- Linux 之 rsyslog 系统日志转发
- TabHost便签的用法
- spring从头开始(一)
- 解决android中listview中嵌套checkbox滑动时checkbox状态改变问题
- 排序算法java 二 --基数排序、归并排序
- linux下指令集
- The type java.lang.Object cannot be resolved It is indirectly referenced ...
- Shell中的while循环【转】
- H5 适配 动画animation js touch
- Leetcode - Length of Last Word
- 获取列表中多个相同元素的索引值
- 第十四章 老板回来了,我不知道—观察者模式
- Git与Repo入门
- 大数据学习笔记2-MapReduce
- hive笔记-----查询数据
- android studio 包依赖
- oracle 参考
- Oracle学习系列2
- HTML 文本框 TextBox 内容改变事件