题目地址:POJ 2142
题意:有两种类型的砝码质量分别为a和b,要求称出质量为d的物品,要求a的数量x和b的数量y的和x+y最小,若有多个x+y的值,取ax+by最小的。
思路:我们应该求ax+by=d。这里我们应用扩展欧几里德求出ax+by=gcd(a,b),那么ax/gcd(a,b)+by/gcd(a,b)=1,然后求出来特解,令x=x*n,把x转化为最小正值,即x=(x%b+b)%b,求出此时的y=(d-ax)/b,若求出的y是负值,把y变成正的,因为砝码的位置涉及左右之分。同理求出y为最小正值是x的解,然后比较两组的值就好了。。

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <bitset>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
typedef __int64 LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
int gcd(int a,int b)
{while(b!=0){int r=b;b=a%b;a=r;}return a;
}
void exgcd(int a,int b,int &x,int &y)
{if(b==0){x=1,y=0;return ;}exgcd(b,a%b,x,y);int t=x;x=y;y=t-(a/b)*y;
}
int main()
{int a,b,d;int x,y;int xx,yy;int tx,ty;while(~scanf("%d %d %d",&a,&b,&d)){if(!a&&!b&&!d) break;int G=gcd(a,b);a/=G;b/=G;d/=G;exgcd(a,b,x,y);xx=x*d;xx=(xx%b+b)%b;yy=(d-a*xx)/b;if(yy<0) yy=-yy;ty=y*d;ty=(ty%a+a)%a;tx=(d-b*ty)/a;if(tx<0) tx=-tx;if(tx+ty>xx+yy){tx=xx;ty=yy;}printf("%d %d\n",tx,ty);}return 0;
}

POJ 2142-The Balance(扩展欧几里德)相关推荐

  1. POJ 2142 The Balance(扩展欧几里德)

    The Balance 由题意可得: {ax1−by1=dbx2−ay2=d\begin{cases}ax_1 - by_1 = d \\\\ bx_2 - ay_2 = d\end{cases}⎩⎪ ...

  2. POJ - 2142 The Balance(扩展欧几里得)

    题目链接:点击查看 题目大意:给出两种重量的砝码,我们需要利用天平称出指定重量的药物,我们需要求出这两种砝码各自的数量,使得砝码数量之和最小 题目分析:我们可以先列出关系式,假设两个砝码的重量分别为a ...

  3. poj 2115 C Looooops(扩展欧几里德算法)

    题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束. 比如:当k=4时,存储的数 i 在0-15之间循环.(本题默认为无符号) 若在有限次内结束,则输出 ...

  4. POJ 2142: 扩展欧几里得算法

    POJ 2142: The Balance Description Data 思路 扩展欧几里得算法 线性组合 Code --扩展欧几里得算法 原题传送门 Description Ms. Iyo Ki ...

  5. POJ 2891 Strange Way to Express Integers ★ (扩展欧几里德解同余式组)

    题目链接:http://poj.org/problem?id=2891 题目大意: 很好的一道题,解同余式组: x = r1 (mod m1) x = r2 (mod m2) -- x = rp (m ...

  6. 青蛙的约会(POJ 1061 扩展欧几里德算法)

    POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...

  7. 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)

    又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...

  8. 欧几里德算法 扩展欧几里德算法

    欧几里德算法 欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数. 计算公式:gcd(a,b) = gcd(b,a mod b). 算法实现: public static int g ...

  9. 扩展欧几里德算法详解

    转自:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 扩展欧几里德算法 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两 ...

最新文章

  1. 端口号被占用怎么解决
  2. 2020年,最适合AI的5种编程语言
  3. 新闻更新php html,phphtml 新闻发布系统,运用php+mysql,里面包括数据库和php文件。 Other systems 其他 249万源代码下载- www.pudn.com...
  4. mysql需要vc_VC连接MySql
  5. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?
  6. ecs服务器数据迁移_某国际物流集团的云迁移解决方案
  7. 用Java描述数据结构之二叉树,前序遍历,中序遍历,后序遍历
  8. EDAS-机器导入失败
  9. B00015 平方矩阵问题
  10. 内存分区0x00000000-0x0000FFFF共64K是null指针
  11. contents()与children()的用法和区别
  12. python空行规则_交互式promp中的空行规则
  13. 黑客捣毁了个暗网杀手网站,却险些触发了世界各地的多起杀戮...
  14. 华为路由器RIP经典案例
  15. computer-06 其它
  16. 蚁群算法(ant system,AS)
  17. 2个月快速通过PMP证书的经验
  18. ROS报错Error:cannot launch node of type [map_server/map_server]
  19. 黑苹果新手指导:名词解释常用软件常见问题说明
  20. 开启智慧的10大网站--非常值得收藏!

热门文章

  1. 华硕电脑进入安全模式的方法
  2. 网易163邮箱开通smtp邮件协议后用python发邮件
  3. win10下安装gcc
  4. AE基础教程第一阶段——15质量图标和效果开关
  5. php龙之战争游戏搭建教程,沙漠副本龙之战争 快速杀龙王4条经验
  6. _bstr_t与BSTR
  7. PYQT5 Painter的简单入门
  8. 微信公众号运营商,如何选择适合自己的微信第三方平台?
  9. 1.6 受控电源(非独立源)
  10. FFN -> GLU -> GAU