POJ 2142 The Balance
来源:互联网 发布:网络教育本科学位难吗 编辑:程序博客网 时间:2024/06/02 06:36
题目链接:http://poj.org/problem?id=2142
题意:给两种砝码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 %100000007int 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;}
0 0
- poj - 2142 - The Balance
- POJ 2142 The Balance
- POJ 2142 The Balance
- POJ 2142 The Balance
- poj 2142 The Balance
- The Balance POJ 2142
- POJ 2142 The Balance
- poj 2142 The Balance
- POJ 2142:The Balance
- poj 2142 The Balance
- POJ 2142 The Balance
- poj 2142 The Balance
- POJ 2142 The Balance
- POJ 2142 The Balance
- POJ 2142 The Balance .
- POJ 2142The Balance
- POJ 2142 The Balance
- POJ 2142 The Balance 拓欧
- 数据结构之二叉树的递归建立和遍历
- rbd map失败的一个问题
- C经典 使用指针变量找出最大值
- Ubuntu的使用:在网页播放声音和视频
- 【一天一道LeetCode】#41. First Missing Positive
- POJ 2142 The Balance
- Redis Essentials 读书笔记 - 第六章: Common Pitfalls (Avoiding Traps)
- Java集合框架
- Unity3D设置布局
- ue4 网络代码分析
- Git与Repo入门
- HTTP常用对照表
- 设计模式六大原则(3):依赖倒置原则
- 24.[Leetcode]Swap Nodes in Pairs